我有一些代码在我的数据库中的表上执行LOCK TABLE。
锁定后,我从同一个表中执行SELECT。我的mysql API接口出现以下错误:
mysqlsel/db server: Table 'Mytable' was not locked with LOCK TABLES
根据一些谷歌搜索,这会转发错误代码:ER_TABLE_NOT_LOCKED
为什么此代码会生成此错误?如果我根本不锁定它,我不会指望它会给出错误,如果我将其锁定,我当然不会发现错误。
答案 0 :(得分:1)
我想我通过'RTM'解决了我自己的问题,
需要锁定的会话必须 获得它需要的所有锁 一个
LOCK TABLES
语句。而 由此获得的锁被保持着 session只能访问锁定的 表。例如,在下面 陈述序列,错误 尝试访问t2时发生 因为它没有锁定在LOCK TABLES
语句中:
我将多个表锁定在单独的锁定语句中,
所以,如果我这样做:
LOCK TABLES Mytable WRITE
LOCK TABLES Mytable2 WRITE
......后续SELECT FROM Mytable
可能会触发此错误...