加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql innodb的行锁举例解析

发布时间:2021-12-17 12:42:50 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要讲解了mysql innodb的行锁举例分析,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习mysql innodb的行锁举例分析吧! 真正决定是否执行要上锁的行不是取出来的行,而是扫描的行。 而是否最索引来
这篇文章主要讲解了“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的行锁举例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!