老师任务30这节课你对幻读的讲解有问题,你举得例子不合适,即使是最低的隔离级别read uncommited,都不会出现你那种情况,数据库不允许两个事务同时修改一条数据。下面我转一个知乎上的关于幻读的...
老师任务30这节课你对幻读的讲解有问题,你举得例子不合适,即使是最低的隔离级别read uncommited,都不会出现你那种情况,数据库不允许两个事务同时修改一条数据。
下面我转一个知乎上的关于幻读的例子,经过测试这个例子没问题(可以自己开两个mysql客户端,打开两个事务测一下):
这里给出 mysql 幻读的比较形象的场景:users: id 主键1、T1:select * from users where id = 1;2、T2:insert into `users`(`id`, `name`) values (1, 'big cat');3、T1:insert into `users`(`id`, `name`) values (1, 'big cat');T1 :主事务,检测表中是否有 id 为 1 的记录,没有则插入,这是我们期望的正常业务逻辑。T2 :干扰事务,目的在于扰乱 T1 的正常的事务执行。在 RR 隔离级别下,1、2 是会正常执行的,3 则会报错主键冲突,对于 T1 的业务来说是执行失败的,这里 T1 就是发生了幻读,因为T1读取的数据状态并不能支持他的下一步的业务,见鬼了一样。
作者:知乎用户
链接:https://www.zhihu.com/question/47007926/answer/222348887
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。