2012-07-16 19 views
6

エンジン(InnoDBやMyISAMなど)に関係なく、この「比較とスワップ」ステートメントは常にアトミックですか? :私は、トランザクションと非トランザクション・データベース・テーブルの両方と互換性のある擬似行レベルロックを行うために、このステートメントを使用するためInnoDBとMyISAMのMySQLのアトミック更新

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

私はこれを尋ねます。

これはrecommended for MyISAMのメソッドですが、ドキュメントではトランザクションを使用することが推奨されているため、InnoDBでこのメソッドが機能するかどうかは不明です。

+0

リンクが壊れています。したがって、この独立した声明の使用は不明である。 –

答えて

4

はい。 InnoDBでは、行がロックされます(IDにユニークなインデックスがあり、更新がスキャンするすべての行がロックされます)。更新され、ロックが解放されます。明示的なトランザクション/自動コミットがオンでない場合、各ステートメントはそれ自身のトランザクションで実行されますが、依然としてトランザクションであり、ロッキングが実行されます。

関連する問題