CS-Base icon indicating copy to clipboard operation
CS-Base copied to clipboard

mysql 事务篇

Open sunwenhaopro opened this issue 1 year ago • 0 comments

第二个发生幻读现象的场景 除了上面这一种场景会发生幻读现象之外,还有下面这个场景也会发生幻读现象。

T1 时刻:事务 A 先执行「快照读语句」:select * from t_test where id > 100 得到了 3 条记录。 T2 时刻:事务 B 往插入一个 id= 200 的记录并提交; T3 时刻:事务 A 再执行「当前读语句」 select * from t_test where id > 100 for update 就会得到 4 条记录,此时也发生了幻读现象。 要避免这类特殊场景下发生幻读的现象的话,就是尽量在开启事务之后,马上执行 select ... for update 这类当前读的语句,因为它会对记录加 next-key lock,从而避免其他事务插入一条新记录。

幻读不是针对的同样的sql语句吗?这里for update和前者严格意义上符合the same吗?根据官网这幻读的定义感觉也好笼统啊[叹气]如果你在两次select之间主动删除一条数据得到的数据条数不也是不同了吗,这不也符合这里面定义的幻读了吗🤪。大佬快来解惑我自己要晕了😇

sunwenhaopro avatar Oct 23 '23 15:10 sunwenhaopro