Mysql表锁定问题

时间:2011-01-03 13:12:15

标签: php mysql database

在我的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。在锁定期间,我想使用数据库中的所有其他表。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

来自mysql reference manual

  

需要锁定的会话必须在单个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

相关问题