MySQL幻读解释及案例演示

幻读: T1读取了一个字段,T2对字段进行了插入。此时T1再次读取时仍然为原来的数据,不过T1如果对T2插入行同样进行插入时就会报错。
实例:
实验环境: mysql-5.6.43,事务自动提交进行关闭 set autocommit=0;
实验流程: 创建连个session,一个进行事务一T1,一个执行事务二T2。T2进行插入数据,T1进行测试幻读结果。

1) #事务T1第一次查看数据行
mysql> select * from auto_test;
在这里插入图片描述
2)#事务二在131行进行插入
mysql> insert auto_test values(131,‘huandu’);
Query OK, 1 row affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.11 sec)

3)#事务T1第二次查看数据行
在这里插入图片描述
可以看出尽管事务二插入了数据,事务一再进行查看时两者数据相同
但是

4) 事务T1对131行进行插入时就会发现
mysql> insert auto_test values(131,‘false’);
ERROR 1062 (23000): Duplicate entry ‘131’ for key ‘PRIMARY’
由于id为主键提示不可对131行进行重复插入。

5) 事务T1对131进行更新是会发现
mysql> update auto_test set name=‘huandu update’ where id=131;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

对事务T1进行提交并查看会发现
在这里插入图片描述
数据插入并进行了更新。

6) 幻读与不可重读:不可重复读为T1未提交第一次读取和T2对表进行更新之后T1再次读取的结果不一致。
幻读:T1两次读取的结果一致,通过上例可以看出,但是在实际表中已经存在了T2插入的一条记录。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值