home wiki.fukuchiharuki.me
Menu

*関連 [#k84d2d70]
-MySQL

*概要 [#wfb46abb]
一度SELECTした結果に応じて再度クエリを発行する場合ロックをかける必要があります。MySQLにはテーブルロックと行ロックがあります。ここでは行ロックの仕方について書きます。

*方法 [#ac527959]
行ロックにはふたつの方法があります。
-共有ロック
 SELECT ... LOCK IN SHARE MODE
-排他ロック 
 SELECT ... FOR UPDATE

*解説 [#l4c8e4c3]
**共有ロック [#r6227ae5]
共有ロックは別のトランザクションに対して更新および削除を制限しますが参照を制限しません。見ているものをトランザクション終了時点で変えないのであれば共有ロックにします。例えば親の存在を確認して子を紐づける場合などです。

**排他ロック [#u2457318]
排他ロックは別のトランザクションに対して更新および削除ならびに参照を制限します。見ているものをトランザクション終了時点で変えるのであれば排他ロックにします。例えば親に子が紐づいていないことを確認して子を紐づける場合などです。

*参考 [#ub451c71]
-http://dev.mysql.com/doc/refman/4.1/ja/innodb-locking-reads.html
-http://tsuttayo.jpn.org/mysql/innodb/lock/