MySQL - 表锁错误

3
我在表锁定方面遇到了一些问题。我已经在事务中锁定了某些表格。 LOCK TABLES t1 READ, t2 READ, t3 READ, t4 READ,t5 READ,t6 READ,t7 READ; 当我进行读取时没有问题,但是当我尝试写入/更新这些表时,它显示错误“Table 't1' was locked with a READ lock and can't be updated”
但是我从未将该表格锁定为写入状态,我必须使用更新后的值写入这些表格。
我的目标是选择和更新行,而其他人在过程完成之前不应与上述表格交互。
非常感谢您的解决方案!

1
RTFM: http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html 持有锁的会话可以读取表格(但不能写入)。 - Marc B
2个回答

3

来自mysql文档

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

READ [LOCAL]锁:

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


1
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

其他会话也可以进行SELECT操作。
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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接