在我的php页面
LOCK TABLE invoice_numbers WRITE
/*some stuff */
SELECT * FROM link_master
/*some stuff */
UNLOCK TABLES
我的问题是锁定表invoice_numbers后。我无法访问 link_master 表,但解锁后我可以访问 link_master 表
为什么会这样?如何在锁定 invoice_numbers 表后访问link_master?
编辑:
我想只锁定单个表invoice_numbers。在锁定期间,我想使用数据库中的所有其他表。有没有办法做到这一点?
答案 0 :(得分:2)
需要锁定的会话必须在单个LOCK TABLES语句中获取所需的所有锁定。例如,在以下语句序列中,尝试访问t2时发生错误,因为它未锁定在LOCK TABLES语句中:
mysql> LOCK TABLES t1 READ; mysql> SELECT COUNT() FROM t1; +----------+ | COUNT() | +----------+ | 3 | +----------+ mysql> SELECT COUNT(*) FROM t2; ERROR 1100 (HY000): Table 't2' was not locked with LOCK TABLES
答案 1 :(得分:1)
你很可能遇到僵局。检查您的代码:
LOCK TABLE link_master WRITE
/*some stuff */
SELECT * FROM invoice_numbers
/*some stuff */
UNLOCK TABLES
您可能将一个表锁定在一个语句中,而将另一个表锁定在同时运行的另一个语句中。只是一个猜测。
查看我的表格锁定问题: http://devoluk.com/mysql-myisam-table-lock-issue.html