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

  • 相关阅读:
    Java基础--JDBC
    DQL---连接查询(内连接、外连接)、子查询、分页查询
    Java基础--注解、反射
    1、Centos7系统安装docker,并配置阿里云镜像加速器
    linux——vim命令
    linux——yum命令
    linux——ps命令
    31、springboot——缓存之JSR107——@Caching和@CacheConfig的使用⑤
    30、springboot——缓存之JSR107——@CacheEvict的使用④
    30、springboot——缓存之JSR107——@CachePut的使用③
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7363175.html
Copyright © 2020-2023  润新知