2017-07-19 7 views

答えて

1

いいえ、更新が必要となるためには、記録上の排他ロックは更新されていないとInnoDBが上の1以上の排他ロックを許可しません。一度に記録する。多くの(すべてではない)状況で

+0

に感謝を参照してください。問題は、リファレンスマニュアルを含むいくつかの場所で排他ロックが必要であることを読んだことですが、ほとんどはFOR UPDATEを使用するためです。このコンテキストの下でUPDATEとFOR UPDATEの間に違いがあるかどうかはわかりません。 –

+0

selectにはupdate句が使用されます。次の時間には、あなたの質問にこれらの点が含まれています。 – Shadow

+0

他に違いはありませんか? –

1

(いくつかのコメントに対処するために)

、これはフォローするパターンです:

BEGIN; 
SELECT ... FOR UPDATE; 
use the data from the SELECT to make decisions, then 
UPDATE the row(s) selected 
COMMIT. 

あなたがFOR UPDATEをオフのままにした場合、その後、いくつかの他の接続がこっそり可能性があなたのUPDATEがそれらの変更を壊すように行を変更してください。 (もちろん、これは "OK" である場合がある。)

UPDATE tbl SET is_locked = 1 WHERE id = 1 and is_locked = 0; 

については

は問題はありません。そのステートメントは、実行方法にかかわらず、「アトミック」です。他の接続はあなたの中に潜入し、あなたを混乱させることはありません。 (それは問題ではありませんので、しかし、それは、論理的に冪等である。)

"にかかわらず" と、私はautocommitBEGINtx_isolation_modeなど

関連する問題