無料Wikiサービス | デモページ
Linuxなどのメモ書き
検索

Adsense

MySQL テーブルのロック


Rev.2を表示中。最新版はこちら



mysql> LOCK TABLES friends READ;

mysql> LOCK TABLES friends WRITE;


mysql> UNLOCK TABLES;


1ではスレッドA,B共friendsテーブルにアクセスできる。
2でスレッドAがテーブルをREADロックする。
3でスレッドBがレコードを取得しようとすると、friendsテーブルはREADロックなので正常に取得できる。
4でfrindsテーブルのレコードを更新しようとすると、ロックが取られているため、ブロックする。
5でスレッドAがテーブルのロックを解除すると、スレッドBでブロックしていたUPDATEが完了する。
WRITEロックを取った場合は、3のレコードの取得もブロックするようになる。


表1 READロック時の挙動
No.
スレッドA
スレッドB
1
mysql> select id,name from friends;
+----+--------+
| id | name |
+----+--------+
| 2 | tomita |
+----+--------+
1 row in set (0.00 sec)

mysql> select id,name from friends;
+----+--------+
| id | name |
+----+--------+
| 2 | tomita |
+----+--------+
1 row in set (0.00 sec)

2
mysql> LOCK TABLES friends READ;
Query OK, 0 rows affected (0.00 sec)


3

mysql> select id,name from friends;
+----+--------+
| id | name |
+----+--------+
| 2 | tomita |
+----+--------+
1 row in set (0.00 sec)

4

mysql> UPDATE friends SET address="Yokohama"
WHERE id=2;
5
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected (51.73 sec)
Rows matched: 1 Changed: 1 Warnings: 0




最終更新 2006/06/02 12:16:03 - kztomita
(2006/06/02 12:08:07 作成)