您好,登录后才能下订单哦!
这篇文章主要讲解了“mysql innodb的行锁举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql innodb的行锁举例分析”吧!
真正决定是否执行要上锁的行不是取出来的行,而是扫描的行。
而是否最索引来扫描记录,则跟具体的执行计划有关系。
所以在分析锁的问题,一定不要忘记看执行计划.
会话1: 由于name是varchar类型,存在隐式转换,所以扫描了所有的记录,因而对所有的记录上锁了
root@sakila 10:33:04>explain select * from tab_no_index where name=1 for update;
+----+-------------+--------------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | tab_no_index | ALL | name | NULL | NULL | NULL | 6 | Using where |
+----+-------------+--------------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)
root@sakila 10:34:30>select * from tab_no_index where name=1 for update;
+------+------+
| id | name |
+------+------+
| 1 | 1 |
+------+------+
1 row in set (0.00 sec)
会话2: 即使更新的记录和回话1选出来的记录不一样,但是由于该记录被第一个会话扫描过,被加锁了,所以也不能上更新锁
root@sakila 10:34:35>select * from tab_no_index where name='4' for update;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
感谢各位的阅读,以上就是“mysql innodb的行锁举例分析”的内容了,经过本文的学习后,相信大家对mysql innodb的行锁举例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。