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

  • 相关阅读:
    自我介绍篇
    iOS支付宝集成时遇到的问题整理(2)
    iOS支付宝集成时遇到的问题整理(1)
    注册登录时本地图片验证码
    集成ZBar时容易遇到的问题以及解决方法
    iOS解析数据时Error=3840
    iOS开发中的一些定时器
    二维码扫描利用ZBar实现
    去除UITableView中多余的分割线或者隐藏cell间的分割线
    iOS 中二维码扫描
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7363175.html
Copyright © 2011-2022 走看看