我正在使用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之前将autocommit设置为0或启动事务? – outis 2010-12-15 15:58:13