Continue(s)

Twitter:@dn0t_ GitHub:@ogrew

MySQLでSELECT FOR UPDATEと行ロックの挙動を検証してみた

どうも、今日も今日とて野毛で飲みながらブログを書いている@0kawaraです。

今日は、普段あまり意識してこなかったMySQLInnoDBでのロックの振る舞いについて色々実験してみました。(もちろん、きっかは自分がドツボにはまったから)

ちゃんと理解するためには「共有・排他的ロックとは」って話や、「行ロックってつまりインデックスレコードロックだよね」などの話とか理解する必要があるんですが、それは

github.com

をちゃんと一読してもらえれば十分かと思います。

(というか、これが問題なく読めて理解できる人はこの記事読む必要ない….)

以下は上のドキュメント含め関連する記事などを読んで自分でInnoDBの行ロック周りについて、というかSELECT FOR UPDATEについて理解を深めるために手元で実験したことのまとめです。

技術的にちゃんとした理解を深めたい人は最後にまとめた参考サイトも是非ご覧になってください。

これを書いてる人はまだまだ理解が完璧ではないので怪しい部分がきっとあるんですが、ご指摘等は@okwraまで宜しくお願いします。

目次

  • SELECT FOR UPDATEとLOCKING READ
  • 条件なしでロックをかける
  • 主キーの条件つきで行のロックをかける
  • 制約のないキーのみの条件で行のロックをかける
  • 制約のあるカラムとないカラムでの複数条件でロックをかける
  • 参考
続きを読む