楽観ハイタ 2011/02/19

DBの楽観排他(ロック)の方法についてです。
まず「楽観的ロックとは」、ですが、とりあえず、がちがちにロックしないという感じでしょうか。
「先に更新したもの勝ち」ぐらいの理解でいいのかな。対称となる悲観的ロックは、ロックとってる間は誰もさわらせないぜぐらいの理解でよろしいか。

で、つぎに、どう実現するのか。
排他したいテーブルに楽観排他用の列を追加します。
考え方は単純に、自分が更新しようとする対象行が、更新するその瞬間に同一であることが保証できればよいわけです。
変更するまえと変更するその瞬間に楽観排他用列が変更されてないことを確認したのち、更新をかけます。
SQLならwhereで同一であることをチェックしつつ、楽観排他用列もちがう値で更新します。

楽観排他列を数値にして、更新するさいにインクリメントするというのが常道っぽいです。で、この楽観排他のための列に時間表現の型を使うってのもある。

: