自分でREADロックを明示的にかけたテーブルに対して、データ追加、更新処理を行うと
エラー(ERROR 1099)が返ってくる。他のユーザーがREADロック
かけているテーブルに対して、データ追加、更新処理を行うとロック待ちになって
タイムアウトまで待ち続けます。
mysql> desc TABLE007;
+———+——————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+———+——————+——+—–+———+—————-+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| comment | varchar(45) | NO | | NULL | |
+———+——————+——+—–+———+—————-+
2 rows in set (0.00 sec)
mysql>
mysql> LOCK TABLES TABLE007 READ;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO TABLE007(comment) VALUES(‘READ LOCK BY MYSELF’);
ERROR 1099 (HY000): Table ‘TABLE007’ was locked with a READ lock and can’t be up
dated
mysql> SELECT COUNT(*) FROM TABLE007;
+———-+
| COUNT(*) |
+———-+
| 4 |
+———-+
1 row in set (0.00 sec)
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO TABLE007(comment) VALUES(‘READ LOCK BY MYSELF’);
Query OK, 1 row affected (0.02 sec)
mysql>
==============================検証その1=================================
【自分でロックしている場合】
※ すぐにエラーコードが返ってくる。
↓
【自分のロック解除した場合】
==============================検証その2=================================
【他のユーザーがロックしている場合】
※ ロックが解除されるまで待ち続ける
↓
【他のユーザーがロックしていたテーブルのロックを解除した場合】
【memo】
━ 1 ━
ロックをかけているユーザーが他のテーブルをロックかけた場合は、前にかけていた
ロックは解除される。同時に複数のテーブルを同時にロックするには以下のように
複数テーブルを同時にロックをかける。
LOCK TABLES TABLE007 READ,TABLE008 READ;
━ 2 ━
READロックは他のSELECTステートメントをブロックしない。