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窗口结束事务才能插入

  • 相关阅读:
    VS2010中的单元测试
    GSM局数据制作2(Erision)
    WPF的BitmapImage的文件无法释放及内存泄露的问题
    跨库查询推荐使用的方法
    我们能做什么呢?
    长尾理论:Windows Vista
    Blackberry阻碍因素
    RIM终于想通了RIM开放新的API
    Prototype库终于有了文档了
    自己编写的MSN历史记录合并工具
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7363175.html
Copyright © 2011-2022 走看看