没有锁表MySQL

时间:2012-03-19 08:38:16

标签: mysql stored-procedures transactions locking innodb

我正在运行一个存储过程,该过程涉及在连接中放置更多表。 我的存储过程会读取INNODB表上的操作,写入以这种方式创建的临时表

CREATE TEMPORARY TABLE IF NOT EXISTS tmpDate
(
dates TIMESTAMP,
values INT,
ids INT
);

最后对一个表(INNODB)的列进行UPDATE操作,其中肯定没有冲突的操作,因为我只对INSERT操作(仅在该StoredProcedure中的SELECT和UPDATE)。< / p>

每次运行时都会收到以下错误消息:

  

超过锁定等待超时;尝试重新启动交易

我立刻认为是因为坚持独占锁。 您是否知道为存储过程执行NO LOCK表的方法或允许我执行SP的方法?

2 个答案:

答案 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数据库的一个问题。我重新启动它,我的存储过程工作正常。我没有找到答案如何没有锁定表进行完整存储过程....