我正在使用SELECT...FOR UPDATE
查询来锁定表。不幸的是,我有一种情况需要在同一个表中锁定两组不同的行,如下所示:
SELECT * FROM mytable WHERE attribute1 = 'something' FOR UPDATE
SELECT * FROM mytable WHERE attribute2 = 'somethingelse' FOR UPDATE
UPDATE mytable SET attribute2 = 'somethingnew' WHERE somethingelse
我需要锁定两组行。我正在做的是,确保表中没有任何对象处于特定状态,然后找到可以放入该状态的其他对象并将它们放在那里。目标是满足某些过于复杂而无法编码到 mysql 中的约束。
所以......问题是,当我SELECT...FOR UPDATE
在同一个事务中的同一张表中两次时会发生什么?第一个锁会被释放吗?我已经看到证据表明情况确实如此,但我无法完全弄清楚如何确认。