说SELECT FOR UPDATE设置一个IX锁。IX锁是意图排他锁,当发出时它意味着“事务T打算在扫描行上设置X(排它)锁”。MySQL术语表表示,关于意图排他性锁:
一种适用于表级别的锁,用于指示事务打算在表中的行上获取什么样的锁。不同的事务可以在同一表上获取不同类型的意图锁,,但是获取表上的意图排他(IX)锁的第一个事务阻止其
我无法解释来自MySql (5.7,InnoDB)的死锁输出。我知道死锁最终将通过更改应用程序级代码来解决,您无法从这个代码片段中找到根本原因。然而,希望有人能告诉我为什么我对这个MySql诊断的解释是不正确的。事务2持有此锁,事务1则等待它:
RECORD LOCKS space id 464385 page no 21 n bits 232 index policy_locator_idx of table事务2似乎也在S (共享)模式下等待相同的锁</em
启用MySQL服务器版本5.1.41并启用InnoDB插件。我有以下三个发票表:发票、invoice_components和invoice_expenses。表发票有invoice_id主键。我有以下交易:START TRANSACTION; SELECT * FROMWHERE invoice = 18 FOR UPDATE;
SELECT * FROM invoice_expenses WHERE invoice = 18 F
根据,更新锁可以在需要写入的时候转换为独占锁。同时,三个锁(X、S和U)的兼容性可以参考下表。X S US ✗ ✓ ✓然而,在一些博客中提到,从MySQL 5.7开始就有一个SX锁,它实现了B-树上操作的文件并发(1977通过这些博客,我发现SX锁与update锁非常相似。例如,它们具有相同的兼容性表。
由于我找不到更多关于MySQL中SX锁的“正式”介绍