隔离级别情景再现


测试前提:关闭mysql事务的自动提交功能

#查看主键
SHOW INDEX FROM t1;
#查看事务是否自动提交
show variables like 'autocommit';
#查看当前会话事务的隔离级别
show variables like 'tx_isolation';
#关闭事务的自动提交功能
set autocommit=0
1.脏读

现象:事务B读到了事务A尚未提交的数据

 设置当前会话隔离级别为读未提交
 set session transaction isolation level read uncommitted;

在这里插入图片描述

2.不可重复读

现象:同一个事务中两次读取的数据不一致,因为中间其他的事务进行数据修改(update)并提交

设置当前会话事务隔离级别为读已提交
set session transaction isolation level read committed;

在这里插入图片描述

3.幻读

现象:A事务进行操作,B查询时无感知,若A为插入操作B插入同一主键的记录会报错,若A为删除操作B更新同条记录会被告知影响行数为0,若A为更新操作B直接覆盖了A的更新,就像出现了幻觉一样,同时也说明了B读不到A已经提交的数据,即此隔离级别解决了不可重复读问题。(若A未提交B操作时会阻塞等待)

设置事务隔离级别为可重复读
set session transaction isolation level repeatable read;
注:上述隔离级别的设置为会话级别的,重新连接即为默认的可重复读级别

在这里插入图片描述
在这里插入图片描述
幻读的解决方案:保证并发事务中执行插入时主键不一致,唯一键不冲突;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值