2009年9月 1日

[mysql 15007] Re: 1行も削除されないDELETE文によるロック

ひらつかさん

ご返答ありがとうございます。

> これはInnoDBのネクストキーロックとギャップロックという仕組みです。
>
> 要するに
> 「id = 3がピンポイントでロックされたという情報を保持する場所が

> InnoDBのデータ構造上どこにもないので、【id = 2 と id = 5の間が
> ロックされた】と翻訳して、それらのレコードに情報を持たせておこう」
> という。
>
> かなり分かりづらいですが、マニュアルにも記載があります。
> http://dev.mysql.com/doc/refman/5.1/ja/innodb-next-key-locking.html
>
> また、
>
> ・idにindexがあるかどうか
> ・idがunique keyかnon-unique keyか
> ・read-committed & binlog_format = rowかどうか
>
> というところで挙動が変わるので、気をつけてください。

なるほど、、、理解できました。
ちょっと上記マニュアルの部分を勘違いしていたようです。
(存在しない行のロックができるものだと思っていました)

ひとまず処理のロジックを変えるかトランザクションを2回に分けるようにしてみます。

ありがとうございました。


投稿者 xml-rpc : 2009年9月 1日 22:42
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/88180
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。