• 事务隔离性


    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 查询数据展示:

    温故而知新
  • 相关阅读:
    第1章:路线图
    第0章:战胜恐惧和懊悔
    c++ 变量 定义 声明
    两个无符号数相减 可以得到负数
    c++ cast operator(类型转换操作符)
    C++中static 的使用方式,以及与c中的static的区别
    重载overload 重写override 重定义redefining
    用到位运算的题目
    C++ 虚函数表解析
    虚函数 动态绑定 实现方式是:虚函数表
  • 原文地址:https://www.cnblogs.com/Uzai/p/11222821.html
Copyright © 2020-2023  润新知