mysql - 如何模拟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
消息。
解决方案
是否启用了死锁检测?
你可以在这里阅读更多:https ://dev.mysql.com/doc/refman/8.0/en/innodb-deadlock-detection.html
一种自动检测何时发生死锁并自动回滚涉及的事务之一(受害者)的机制。可以使用 innodb_deadlock_detect 配置选项禁用死锁检测。
推荐阅读
- c# - 对于每个新找到的,用一些不同的值替换字符串中的键
- node.js - 使用猫鼬保存到数据库时出现 ObjectParameterError
- javascript - window.history.back() 需要两次点击才能返回
- firebase - 我想检查我指定的文档id是否存在
- php - 如何优化 laravel 中的搜索功能?
- algorithm - 优化函数的时间复杂度 - Kotlin
- amazon-web-services - 时间戳列上的 AWS DMS time_zone 问题
- python - Guess The Number Game Atom
- jestjs - JESTJS 不能在模块外使用 import 语句
- python - 在 Python 中,我需要读取一个 CSV 文件并确定创建的最高 ID 号