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

Adsense

MySQL テーブルのロック の差分
Rev.1→Rev.2  追加箇所 削除箇所




mysql> LOCK TABLES friends READ;

mysql> LOCK TABLES friends WRITE;


mysql> UNLOCK TABLES;


1ではスレッドA,Bfriendsテーブルアクセスできる
2スレッドAテーブルREADロックする
3スレッドBレコード取得しようとするとfriendsテーブルREADロックなので正常取得できる
4frindsテーブルレコード更新しようとするとロックられているためブロックする
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 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