首页 > 解决方案 > 如何模拟mysql中一行的死锁?

问题描述

要在 mysql 中模拟 a lock,我可以使用以下命令获取该行:

BEGIN;
SELECT * FROM table WHERE id=1 FOR UPDATE;

现在,如果我尝试更新该行(从另一个连接),它将在innodb_lock_wait_timeout几秒钟后引发以下错误(默认值:50):

(1205, '超过锁定等待超时;尝试重新启动事务')

那么我将如何模拟死锁,所以我得到一个看起来像这样的错误:

尝试获取锁时发现死锁;尝试重启事务”</p>

当我尝试查询或更新行时?


更新:即使在尝试模拟时the mysql deadlock example,我也得到Lock wait timeout exceeded; try restarting transaction而不是deadlock消息。

标签: mysqlinnodb

解决方案


是否启用了死锁检测?

你可以在这里阅读更多:https ://dev.mysql.com/doc/refman/8.0/en/innodb-deadlock-detection.html

一种自动检测何时发生死锁并自动回滚涉及的事务之一(受害者)的机制。可以使用 innodb_deadlock_detect 配置选项禁用死锁检测。


推荐阅读