【问题标题】:MySql - Table 'proc' was not locked with LOCK TABLESMySql - 表 'proc' 未使用 LOCK TABLES 锁定
【发布时间】:2026-02-08 02:25:01
【问题描述】:

我的应用程序包含一个函数,我在其中尝试锁定表、更新它(使用存储过程)然后解锁它。代码如下:

LOCK TABLE mytable WRITE;
CALL myStoredProc;
UNLOCK TABLES;

调用该函数时,在执行CALL myStoredProc; 部分时会出错,并给出以下错误消息:

Table 'proc' was not locked with LOCK TABLES

我尝试将mysql.procmytable 一起锁定,但这似乎没有帮助。对这种场景有什么想法吗?

更新: 第一个存储过程如下:

CALL mystoredproc2(NOW());
UPDATE mytable SET _column = NOW();
SELECT * FROM mytable WHERE _column > NOW();

如您所见,上述存储过程嵌套了另一个。第二个只包含一个更新语句:

UPDATE mytable2 SET _column = _now;

仅供参考:我还在 lock 语句中锁定了mytable2,但这也不起作用。

【问题讨论】:

  • proc != mytable: 可能显示 [相关部分] magicalStoredProc?

标签: mysql


【解决方案1】:

我将嵌套的 mystoredproc2 存储过程作为一系列 SQL 语句移到了 mystoredproc 之外,这样就成功了。

【讨论】: