MySQL幻读解释及案例演示

  • Post author:
  • Post category: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插入的一条记录。



版权声明:本文为weixin_42051691原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。