T1 | T2 | ||
begin; select * from test where name = 'q'; Empty set (0.00 sec) | T1第一次查询,未命中,没有生成ReadView | T1事务开始未查询到对应条件数据,后来更新了其他事务提交插入的对应条件数据,T1再次查询时,出现了对应条件的数据 | |
begin; insert into test value (110,'q'); Query OK, 1 row affected (0.00 sec) | T2插入,T1查询未生成ReadView,T2不需要等待,直接成功 | ||
update test set id = 200 where name = 'q'; pending。。。 | 因为T2的插入未提交,这里T1阻塞 | ||
commit; | T2提交,T1阻塞消除 | ||
select * from test where name = 'q'; +-----+------+ | id | name | +-----+------+ | 200 | q | +-----+------+ 1 row in set (0.00 sec) | T1再次查询,出现了第一次查询未出现的新行,且数据是T1更新后的 | ||
commit; | T1提交 |
MySQL幻读复现
最新推荐文章于 2023-08-07 15:42:02 发布