mysql> lock table t read;
查詢OK,0行受影響(1分鍾3.82秒)
mysql>從測試中顯示打開的表;
+ ---------- + ------- + -------- + ------------- +
| 數據庫| 表| In_use | Name_locked |
+ ---------- + ------- + -------- + ------------- +
| 測試| t | 1 | 0 |
| 測試| t1 | 0 | 0 |
+ ---------- + ------- + -------- + ------------- +
2行(0.00秒) )
mysql> select * from t;
+ ------ + ------ +
| id | 名稱|
+ ------ + ------ +
| 1 | aaaa |
| 2 | bbb |
| 3 | ddd |
| 4 | ttt |
+ ------ + ------ +
4行集(0.00秒)
mysql> select * From t1;
ERROR 1100(HY000):表't1'未鎖定與LOCK TABLES
mysql> update t set name ='a';
錯誤1099(HY000):表't'被鎖定,並且無法更新
mysql> insert into t1 values(1,'aa');
ERROR 1100(HY000):表't1'未鎖定與LOCK TABLES
mysql> delete from t1;
ERROR 1100(HY000):表't1'未鎖定在LOCK TABLES中
MySQL > insert into t values(5,'e');
ERROR 1099(HY000):表't'被鎖定,並且無法更新
mysql > update t set name ='c';
錯誤1099(HY000):表't'被鎖定,並且無法
從t 更新mysql> delete;
錯誤1099(HY000):表't'被鎖定,並且無法更新
在打開一個sesion2:
mysql> select * from t;
+ ------ + ------ +
| id | 名稱|
+ ------ + ------ +
| 1 | aaaa |
| 2 | bbb |
| 3 | ddd |
| 4 | ttt |
+ ------ + ------ +
4行集(0.00秒)
mysql> select * From t1;
+ ------ + ------ +
| id | 名稱|
+ ------ + ------ +
| 1 | a |
| 2 | b |
| 3 | d |
| 3 | d |
+ ------ + ------ +
4行集(0.00秒)
mysql> delete from t1 where id = 3;
查詢OK,2行受影響(0.03秒)
mysql> select * From t1;
+ ------ + ------ +
| id | 名稱|
+ ------ + ------ +
| 1 | a |
| 2 | b |
+ ------ + ------ +
mysql> insert into t1 values(3,'d');
查詢OK,1行受影響(0.03秒)
2行集(0.00秒)
mysql> insert into t values(3,'d');
卡住
mysql> delete from t;
卡住
update t set name ='a';
卡住結論:通常是session1因為某個進程鎖了T,在沒有釋放鎖時,想要訪問另外一個T1,就會報錯ERROR 1100(HY000):表't1'沒有鎖定與LOCK TABLES
在mysql中,如果某個會話使用lock table tname read |寫鎖定某個表,
那么同一個會話中只能對鎖定的表進行查詢操作,不能對鎖定的表進行更新插入刪除,對不允許沒有鎖定的表進行查詢更新插入刪除,其他會話對鎖定的表只能查詢,不能進行更新,插入,刪除操作
其他會議對沒有鎖定的表仍然可以進行選擇,更新,插入,刪除操作