zoukankan      html  css  js  c++  java
  • 事务隔离性

    1. 脏读:未提交  读  read uncommit 事务A读取事务B未提交的数据

    事务A 读取事务B更新的数据, 然后事务B回滚,那么A读取到的数据就是脏数据:

    情景展示:

    1. 会话B 可提交读

    set SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    
    BEGIN
    update account set balance = balance - 50 where id = 1

    2. 会话A 读取表数据

    set SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    
    select * from account
    

      

    3. 此时会话A看到 id = 1的 balance = 350, 想要执行更新操作,350 - 50 =300

    update account set balance = balance - 50 where id = 1
    

    4. 在执行之前, 会话B 执行rollback 回滚了
    5.然后结果并没有改变

    2.已提交读:read COMMITTED:事务A 会读取到事务B已提交的数据

    1. 新建一个会话,会话设置为 read committed 已提交读,然后开启一个事务

    set SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED

    BEGIN

    执行更新语句:
    update account set balance = balance - 50 where id = 1

    2.新建一个会话,设置为已提交读,然后开启事务,查询表数据

    set SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED

    BEGIN

    select * from account


    读取到的数据仍然是400

    3. 可重复读 REPEATABLE READ
    可重复读和读已提交的效果很相似,
    二者的区别是什么:当会话提交后, 在另一个会话中,查询的数据不变

    原始数据

    1.开启一个会话, 设置会话级别,可重复读,然后开启事务,更新操作

    set SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

    BEGIN

    update account set balance = balance - 50 where id = 1

    2.开启另一个会话,设置会话级别,可重复读,然后开启事务,执行查询操作

    set SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

    BEGIN

    select * from account

    3.会话1 提交事务 commit, 然后会话1查询数据展示:

    4.会话2 查询数据展示:

    温故而知新
  • 相关阅读:
    Windows Phone 7 中常用Task
    设置Highchart柱子最大宽度( 让 highcharts支持maxPointWidth属性)
    Asp.Net MVC 使用FileResult导出Excel数据文件
    js获取网页高度
    使用window.addEventListener 和 window.attachEvent 判断浏览器
    slimscroll滚动条插件简单用法
    js中如何快速获取数组中的最大值最小值
    js 判断浏览器类型
    python使用ldap进行用户认证
    关于go声明切片的一些疑问
  • 原文地址:https://www.cnblogs.com/Uzai/p/11222821.html
Copyright © 2011-2022 走看看