我正在使用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