ロック
■概要
ロックとはトランザクション中に他からSQLアクセスを受け付けないようにする仕組みのことです。
ロックを使用することでACID特性を考えた処理が実装できます。
■SQL
MySQLでロックを行うには「LOCK」「UNLOCK」を使用します。
この二つはワンセットになっているのでLOCKを実行したテーブルは必ずUNLOCKを行います。
●LOCK
LOCK命令はロックを行うテーブルとロックの種類を指定することで、
指定したテーブルをロックする命令です。
・書式
LOCK TABLES テーブル名 ロックの種類
・具体例
LOCK TABLES employee READ;
・ロックの種類
ロックにはREADとWRITEがあります。
この2つの種類を使い分けてテーブルをロックします。
・READ
READ設定はロックを行ったテーブルに対しての
書き込みを不可にし、読み込みのみを可能とします。
これは、外からではなくロックを行った
トランザクションも含まれます。
・WRITE
WRITE設定はロックを行ったテーブルに対して
ロックを行ったトランザクションでは読み書きを許可し、
外部からは読み書きを不可にします。
・複数のテーブル同時指定
LOCK命令では一度に複数のテーブルを同時に
ロックすることができます。
・書式
LOCK TABLES テーブル名1 種類1, テーブル名2 種類2
・具体例
LOCK TABLES employee WRITE, official_post READ;
●UNLOCK
UNLOCKはロック状態のテーブルを解除します。
・書式
UNLOCK TABLES
・具体例
UNLOCK TABLES;
■デッドロック
デッドロックとは2つ以上のトランザクション間で互いのテーブルの待ち
結果としてどちらのトランザクションも進まなくなってしまう状態のことです。
上の図のようにトランザクションAではテーブル2をトランザクションBでは
テーブル1の解除を待っているので永遠に待機状態が続くことになります。