我通过以下查询在一个事务中锁定了一行
START TRANSACTION;
SELECT id FROM children WHERE id=100 FOR UPDATE;
Run Code Online (Sandbox Code Playgroud)
在另一个交易中,我有一个查询如下
START TRANSACTION;
SELECT id FROM children WHERE id IN (98,99,100) FOR UPDATE;
Run Code Online (Sandbox Code Playgroud)
它会超出错误锁定等待超时.
这里100已被锁定(在第一次交易中)但是ids 98,99没有被锁定.如果在上面的查询中只有100行被锁定,那么有任何可能返回98,99的记录.所以结果应该如下
ID
===
98
99
===
应忽略Id 100,因为100被事务锁定.