mysql - 为什么我可以在 innodb 的一条记录上有两个锁(X 和 S)?我知道S锁和X锁不能同时存在

标签 mysql innodb

enter image description

为什么 innodb 中的一条记录可以有两个锁(X 和 S)?我知道S锁和X锁不能同时存在。

最佳答案

你不能。您的 S 锁将升级为 X 锁,这两个查询在同一事务中按顺序执行。你两者都没有。

如果第二个事务也获得了相同记录上的 S 锁,然后运行您的 FOR UPDATE 查询,它至少会阻塞,直到另一个事务进行下一步操作,也许更长时间,直到锁升级可能发生或确定不可能。最终提示会返回,否则就会陷入僵局。

关于mysql - 为什么我可以在 innodb 的一条记录上有两个锁(X 和 S)?我知道S锁和X锁不能同时存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44558314/

相关文章:

mysql - 优化 DELETE FROM mdl_grade_items_history

mysql - 为表创建两个别名

php - JSON格式为字符串,转换为php数组?

php - JSON 转义序列

php - MySQL 更新查询 - 竞争条件和行锁定会遵守 'where' 条件吗? (php, PDO, MySQL, InnoDB)

mysql - 如何使用事务中的 INSERT 和 UPDATE 语句来防止这种死锁

MySQL InnoDB - 将父级链接到两个子级之一的键的约束

php - echo数组数据将所有文本转为小写

php - 如何检查PHP中的mysql条目是否为空?

mysql - MYSQL表添加复合索引