Session A
BEGIN; // 两个BEGIN首先同时开启,这是第一步
INSERT INTO tx(id, account) VALUES (NULL, 8888); 第三步
COMMIT; // 第四步
Session B
BEGIN;// 两个BEGIN同时首先开启,这是第一步
SELECT * FROM tx; // 读到N条记录,这是第二步
UPDATE tx SET account = account - 50; 第五步
SELECT * FROM tx; // 第六步,执行完这一步,就读到了第五步的结果,出现了幻读
COMMIT;
老师,第六步出现的应该就是幻读吧?那么出现幻读的原因,我猜是不是因为update语句更新了undo日志中这些记录的版本,然后第六步的快照读读取了最新版本的记录?