MySQL/行ロックする
関連
- MySQL
概要
一度SELECTした結果に応じて再度クエリを発行する場合ロックをかける必要があります。MySQLにはテーブルロックと行ロックがあります。ここでは行ロックの仕方について書きます。
方法
行ロックにはふたつの方法があります。
- 共有ロック
SELECT ... LOCK IN SHARE MODE
- 排他ロック
SELECT ... FOR UPDATE
解説
共有ロック
共有ロックは別のトランザクションに対して更新および削除を制限しますが参照を制限しません。見ているものをトランザクション終了時点で変えないのであれば共有ロックにします。例えば親の存在を確認して子を紐づける場合などです。
排他ロック
排他ロックは別のトランザクションに対して更新および削除ならびに参照を制限します。見ているものをトランザクション終了時点で変えるのであれば排他ロックにします。例えば親に子が紐づいていないことを確認して子を紐づける場合などです。
参考
- http://dev.mysql.com/doc/refman/4.1/ja/innodb-locking-reads.html
- http://tsuttayo.jpn.org/mysql/innodb/lock/
作成日 2013-08-17
