CS-Base
CS-Base copied to clipboard
mysql 事务篇
第二个发生幻读现象的场景 除了上面这一种场景会发生幻读现象之外,还有下面这个场景也会发生幻读现象。
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之间主动删除一条数据得到的数据条数不也是不同了吗,这不也符合这里面定义的幻读了吗🤪。大佬快来解惑我自己要晕了😇