表[tablename]未锁定

时间:2012-01-20 09:26:01

标签: php mysql

我正在编写一个锁定表的MySQL查询:

"LOCK TABLE table_1 WRITE"

之后我执行了一些函数,在其中一个函数中,我正在另一个我没有锁定的表上执行另一个查询:

"SELECT * FROM completely_different_table_2"

然后我收到以下错误消息:

Table 'completely_different_table_2' was not locked with LOCKED TABLES 

确实,MySql告诉我表没有锁定是正确的。但为什么会抛出错误?任何想法我怎么能解决这个问题?

提前致谢。

1 个答案:

答案 0 :(得分:2)

您需要锁定要在LOCK发布之前使用的每个表。您只能为completely_different_table_2提供READ LOCK,这允许其他进程在锁定时读取此表:

LOCK TABLES table_1 WRITE, completely_different_table_2 READ;
PS:MySQL有理由这样做。如果您请求LOCK,则需要冻结数据的一致状态。如果您从completely_different_table_2内的LOCK读取数据,则写入table_1的数据将以某种方式依赖于此另一个表格。因此,您不希望任何人在LOCK期间更改此表,也请求第{2}个READ LOCK。如果您写入table_1的数据不依赖于其他表,则只需在LOCK发布后再查询。