mysql innodb的行锁举例分析

网友投稿 425 2023-12-24 11:38:26

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的行锁举例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:vue如何和后端结合?
下一篇:怎么解决MySQL中的ERROR 1799报错问题
相关文章