我正在编写一个锁定表的MySQL查询:
"LOCK TABLE table_1 WRITE"
之后我执行了一些函数,在其中一个函数中,我正在另一个我没有锁定的表上执行另一个查询:
"SELECT * FROM completely_different_table_2"
然后我收到以下错误消息:
Table 'completely_different_table_2' was not locked with LOCKED TABLES
确实,MySql告诉我表没有锁定是正确的。但为什么会抛出错误?任何想法我怎么能解决这个问题?
提前致谢。
答案 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
发布后再查询。