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 |写锁定某个表,
那么同一个会话中只能对锁定的表进行查询操作,不能对锁定的表进行更新插入删除,对不允许没有锁定的表进行查询更新插入删除,
其他会话对锁定的表只能查询,不能进行更新,插入,删除操作
其他会议对没有锁定的表仍然可以进行选择,更新,插入,删除操作