SELECT...FOR UPDATE
クエリを使用してテーブルをロックしています。残念ながら、次のように、同じテーブル内の 2 つの異なる行セットをロックする必要がある状況があります。
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
同じトランザクション内で同じテーブルから 2 回アクセスするとどうなるかということです。最初のロックは解除されますか? これが事実であるという証拠を見てきましたが、確認する方法がよくわかりません。