Mysql - 表锁定错误

时间:2015-01-09 14:32:34

标签: mysql error-handling table-lock

我遇到了表锁定的一些问题。我在交易中锁定了一定数量的表格。 LOCK TABLES t1 READ, t2 READ, t3 READ, t4 READ,t5 READ,t6 READ,t7 READ;

虽然读它没关系,但是当我试图写/更新到这个表时,它显示错误表't1'被锁定并且无法更新

但是我从来没有锁定表格进行写入,我必须使用更新的值写入这些表格。

我的目标是我需要选择并且我需要更新行,而其他人不应该与上面的表交互,直到流程结束。

非常感谢您的解决方案!

2 个答案:

答案 0 :(得分:2)

来自mysql doc

锁定获取规则 要在当前会话中获取表锁,请使用LOCK TABLES语句。可以使用以下锁定类型:

READ [LOCAL] lock:

持有锁的会话可以读取表(但不能写入)。

答案 1 :(得分:0)

MariaDB [test]> lock table super1 read;
Query OK, 0 rows affected (0.00 sec)


MariaDB [test]> select * from super1;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  5 |
|  6 |
|  7 |
+----+
6 rows in set (0.00 sec)

MariaDB [test]> insert into super1 VALUE(10);
ERROR 1099 (HY000): Table 'super1' was locked with a READ lock and can't be updted

其他会话也可以选择

MariaDB [test]> unlock tables;
Query OK, 0 rows affected (0.00 sec)

MariaDB [test]> lock table super1 write;
Query OK, 0 rows affected (0.00 sec)

其他会话无法选择

MariaDB [test]> insert into super1 VALUE(10);
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> insert into super1 VALUE(11);
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> unlock tables;
Query OK, 0 rows affected (0.00 sec)