深入了解Mysql【十一】幻读问题与Next-Key-Locking机制
在默认的事务隔离级别:可重复度(repeatable read),InnoDB采用Next-Key Locking机制来避免幻读问题(Phanton Problem)。
1、幻读的定义
指在同一事务下,连续执行两次同样的SQL语句,可能导致不同的结果,第二次的SQl语句可能会返回之前不存在的行。
2、例子
假设表t有一个值1、2、3、4、5组成。
此时事务T1执行SQL:
1 | select * from t where id>3; |
结果返回4和5,这时事务没有提交。
事务T2,向表中插入了一个6。
这时T1又执行了一个查询,发现结果为4、5、6,产生了幻读。
3、解决办法
使用Next-Key Locking机制,来避免幻读。
行锁有三种算法:
- Record Lock
单个行记录上的锁,会去锁定索引记录。 - Gap Lock
间隙所,锁定一个范围,但是不包含记录本身。 - Next-Key Lock
上面两种锁的结合,锁定一个范围和记录本身,InnoDB中行的查询都采用这种锁定算法。
采用Next-Key Lock的锁定技术称为Next-Key Lokong。
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!