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 |写锁定某个表,

那么同一个会话中只能对锁定的表进行查询操作,不能对锁定的表进行更新插入删除,对不允许没有锁定的表进行查询更新插入删除,

其他会话对锁定的表只能查询,不能进行更新,插入,删除操作

其他会议对没有锁定的表仍然可以进行选择,更新,插入,删除操作

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 |写锁定某个表,

那么同一个会话中只能对锁定的表进行查询操作,不能对锁定的表进行更新插入删除,对不允许没有锁定的表进行查询更新插入删除,

其他会话对锁定的表只能查询,不能进行更新,插入,删除操作

其他会议对没有锁定的表仍然可以进行选择,更新,插入,删除操作