mysql テーブルロック&行ロックまとめ
よく忘れるのでメモ
InnoDBで行ロック/テーブルロックになる条件 - (゚∀゚)o彡 sasata299's blog
MyISAM・・テーブルロック
InnoDB・・行ロック
InnoDBでも制約のないカラムに対して更新をかけるとテーブルロックになる
MySQL InnoDBの行レベルロック
共有ロック・・LOCK IN SHARE MODE
排他ロック・・FOR UPDATE
通常のSELECTでは一切ロックされないので、データの整合性を保持するためにSELECT時にロックをかける。
■ロックの流れ
START TRANSACTION(またはBEGIN)でトランザクションが開始される。
FOR UPDATEでSELECTするとそのレコードがロックされる。
(他のプロセスが該当レコードをFOR UPDATEでSELECTしてもロック待ちとなり取得できない。)
UPDATE/INSERT処理完了後、COMMIT(またはROLLBACK)するとロックが外れる。
(他のプロセスでロック待ちになっていた場合、処理が再開される)
※あくまで行ロックなので、同じテーブルでもレコードが違えば、ロック待ちとはならない。