我正在运行一个存储过程,该过程涉及在连接中放置更多表。 我的存储过程会读取INNODB表上的操作,写入以这种方式创建的临时表
CREATE TEMPORARY TABLE IF NOT EXISTS tmpDate
(
dates TIMESTAMP,
values INT,
ids INT
);
最后对一个表(INNODB)的列进行UPDATE操作,其中肯定没有冲突的操作,因为我只对INSERT操作(仅在该StoredProcedure中的SELECT和UPDATE)。< / p>
每次运行时都会收到以下错误消息:
超过锁定等待超时;尝试重新启动交易
我立刻认为是因为坚持独占锁。 您是否知道为存储过程执行NO LOCK表的方法或允许我执行SP的方法?
答案 0 :(得分:2)
您不应该使用InnoDB创建TEMPORARY TABLES。 There was a past bug report on this
DROP TABLE IF EXISTS tmpDate;
CREATE TEMPORARY TABLE tmpDate
(
date s TIMESTAMP,
values INT,
ids INT
) ENGINE=MyISAM;
自full table locks are imposed but non-blocking in nature以来,Tmp表最好用作MyISAM。
答案 1 :(得分:0)
此错误:"Lock wait timeout exceeded; try restarting transaction"
这是MySQL数据库的一个问题。我重新启动它,我的存储过程工作正常。我没有找到答案如何没有锁定表进行完整存储过程....