mysqlinnodb的行锁(5)--next-Key锁

间隙锁 next-key, 是针对范围条件不存在的记录上锁,避免不可重复读和幻象读。 如果是 read committed 的隔离级别,则不存在此问题。
所以: 我们在开发中,如果使用 repeatable read的隔离级别,要尽量减少针对一定范围记录的更新,不然会严重影响并发插入。

特例: 通过相等的条件,申请一个不存在的记录的锁,也会使用next-key锁,并影响记录的插入。


root@sakila 10:46:49>show variables like '%tx_isolation%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)

会话1:
root@sakila 10:49:04>select * from tab_no_index where id=111 for update;
Empty set (0.00 sec)

会话2:  因为第一个会话加锁的记录不存在,所以对 next-key加锁了,没有范围,等于所有,所以插入不了新的记录了
root@sakila 10:47:43>insert into tab_no_index values(200,'200');
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
root@sakila 10:49:17>rollback;
Query OK, 0 rows affected (0.01 sec)


本文题目:mysqlinnodb的行锁(5)--next-Key锁
当前URL:http://csruizhi.cn/article/ipgodg.html

其他资讯

Copyright © 2007-2024 成都优众联杰科技有限公司 All Rights Reserved 蜀ICP备2024116266号
友情链接: 做网站设计 重庆企业网站建设 成都网站建设流程 公司网站建设 手机网站建设套餐 移动网站建设 成都定制网站建设 手机网站制作 网站制作 企业网站建设公司 成都网站制作 营销型网站建设 外贸营销网站建设 高端品牌网站建设 营销型网站建设 响应式网站设计方案 成都网站设计 品牌网站建设 成都网站建设 营销网站建设 成都网站建设 成都响应式网站建设