6

この「コンペアアンドスワップ」ステートメントは、エンジン(InnoDBやMyISAMなど)に関係なく常にアトミックですか?:

UPDATE tbl_name SET locked=1 WHERE id=ID AND locked <> 1;

このステートメントを使用して、トランザクションデータベーステーブルと非トランザクションデータベーステーブルの両方と互換性のある疑似行レベルのロックを実行するつもりなので、これを尋ねます。

これはMyISAMに推奨される方法ですが、ドキュメントでは代わりにトランザクションを使用することが提案されているため、これがInnoDBで機能するかどうかはわかりません。

4

1 に答える 1

4

はい。InnoDBでは、行がロックされ(idに一意のインデックスがあり、更新によってスキャンする必要のあるすべての行がロックされます)、更新され、ロックが解除されます。明示的なトランザクションに参加していない場合/自動コミットがオンになっている場合、各ステートメントは独自のトランザクションで実行されますが、それでもトランザクションであり、ロックが実行されます

于 2012-08-13T17:59:43.817 に答える