zoukankan      html  css  js  c++  java
  • 1.演示不同隔离级别下的并发问题

    演示不同隔离级别下的并发问题

    1.当把事务的隔离级别设置为read uncommitted,会引发脏读、不可重复读和虚读
    A窗口
    set transaction isolation level read uncommitted;
    start transaction;
    select * from bank;
    ----发现a账户是1000元,转到b窗口
    select * from bank;

    B窗口
    start transaction;
    update bank set money=money+100 where name='a';
    ----不要提交,转到a窗口查询

    2.当把事务的隔离级别设置为read committed 时,会引发不可重复读和虚读,但避免了脏读
    A窗口
    set transaction isolation level read committed;
    start transaction;
    select * from bank;
    ----发现a账户是1000元,转到b窗口
    select * from bank;
    ----发现a账户多了100,这时候,a读到了别的事务提交的数据,连续读取a账户读到的是不同的结果 (不可重复读)

    B窗口
    start transaction;
    update bank set money=money+100 where name='a';
    commit;
    ----转到a窗口查询

    3.当把事务的隔离级别设置为repeatable read (mysql默认级别) 时,会引发虚读,但避免了脏读和不可重复读
    A窗口
    set transaction isolation level repeatable read;
    start transaction;
    select * from bank;
    ----发现表有4条记录,转到b窗口
    select * from bank;
    ----可能发现表有5条记录,这时候发生了a读取到另外一个事务插入的数据 (虚读)

    B窗口
    start transaction;
    insert into bank (name,money) values ('e',1000);
    commit;
    ----转到a窗口查询

    4.当把事务的隔离级别设置为Serializable,会避免所有问题
    A窗口
    set transaction isolation level Serializable;
    start transaction;
    select * from bank;


    B窗口
    start transaction;
    insert into bank (name,money) values ('e',1000);
    ----发现不能插入,只能等待a窗口结束事务才能插入

  • 相关阅读:
    AtCoder Grand Contest 49
    Kotlin Heroes 5: ICPC Round 题解 (A-H)
    轮盘赌随机选择算法
    洛谷P1579.验证哥德巴赫猜想(DFS+素性测试)
    洛谷P1308.统计单词数(字符串匹配)
    洛谷P1149.火柴棒等式(暴力搜索)
    洛谷P1036.选数(DFS)
    洛谷P1028.数的计算(动态规划)
    Python对list操作的一些小技巧
    图的DFS和BFS(邻接表)
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7363175.html
Copyright © 2011-2022 走看看