【02】MySQL事务隔离级别演示

隔离级别

  1. 读未提交:Read Uncommitted:最低级别,脏读、可重复读、幻读都会发生
  2. 读已提交:Read Committed:可避免脏读
  3. 可重复读:Repeated Read:避免脏读,可重复读,MySQL默认隔离级别
  4. 串行化: Serializable:可避免全部,锁表,效率低
  • 脏读
    事务A读取了未提交的事务B中的数据

  • 不可重复读-侧重修改
    事务A多次读取同一数据,事务B在A多次读取过程中,对数据做了更新并提交,导致事务A多次读取同一数据,结果不一致。

  • 幻读-侧重新增删除
    事务A读取数据库,期间事务B新增一条,A再查,结果不一致

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

版本:MySQL8
工具:DataGrip

1、读未提交 Read Uncommitted:

1.1 准备工作

版本:MySQL8
工具:DataGrip

-- 0.初始数据
CREATE TABLE `verify_transaction` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(16) NOT NULL DEFAULT '',
  `balance` decimal(11,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='事务隔离级别验证表';

insert into verify_transaction (name,balance)
values ('lilei',450),
       ('hanmei',16000),
       ('lucy',2400);
1.2 打开两个窗口分别代表事务A、事务B
  • 设置当前事务模式为read uncommitted
set session transaction isolation level read uncommitted ;
start transaction ;

在这里插入图片描述

  • 事务B更新verify_transaction表,不提交
    update verify_transaction set balance=0 where id=1;
  • 事务A查询
    在这里插入图片描述
  • 事务B回滚 rollback;
  • 事务A查询,此前A看到 lilei 的balance为0就是脏数据,也就是脏读
    在这里插入图片描述

2、读已提交 Read Committed:

  • 事务B更新表未提交

  • 事务B查询表
    在这里插入图片描述

  • 事务A查询表未读取到事务B未提交的数据,解决了脏读
    在这里插入图片描述

  • 此时事务B提交,事务A再查询发现 lilei 的balance值与上次查询不一样,产生了不可重复读的问题

3、可重复读 Repeated Read:

  • 初始数据
    在这里插入图片描述
  • 事务A查询不提交
    在这里插入图片描述
  • 事务B修改hanmei的balance为1111并提交
    在这里插入图片描述
  • 事务A再查询可以看到hanmei的balance还是8888,事务B的修改提交并没有影响事务A,解决了不可重复读
    在这里插入图片描述
  • 但是此时两个事务查询的sum(balance) 是不一样的,事务A查询的balance是大于事务B修改过的,事务A提交之后再值,发现值变少了,刚刚的值就是幻读。

4、串行化 Serializable:

。。。

什么是MVCC

mvcc全称是multi version concurrent control(多版本并发控制)。mysql把每个操作都定义成一个事务,每开启一个事务,系统的事务版本号自动递增。每行记录都有两个隐藏列:创建版本号和删除版本号

select:事务每次只能读到创建版本号小于等于此次系统版本号的记录,同时行的删除版本号不存在或者大于当前事务的版本号。
update:插入一条新记录,并把当前系统版本号作为行记录的版本号,同时保存当前系统版本号到原有的行作为删除版本号。
delete:把当前系统版本号作为行记录的删除版本号
insert:把当前系统版本号作为行记录的版本号
》待续
【参考】https://www.jb51.net/article/116477.htm
【参考】https://www.cnblogs.com/fanguangdexiaoyuer/p/10759746.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值