Mysql 一致读取是否会导致锁定超时错误?

Mysql 一致读取是否会导致锁定超时错误?,mysql,locking,innodb,Mysql,Locking,Innodb,我有一个PHP函数,它执行一些SQL查询,一系列选择/插入 选择从标准表(InnoDB)读取,并在临时表(内存)中执行插入。它们都不是在事务中执行的(即使我想让MySQL 5.7在启用GTID时不支持在事务中使用临时表,我也不能这样做) 有一段时间,这些查询返回了一个“锁定超时超过”错误,我无法理解,因为没有事务,所有选择都是一致的读取?我也无法想象插入是一个问题,因为所有临时表的作用域都是这个线程/连接,并且只使用一次 很明显,我肯定错过了一些明显的东西?如果您添加相关代码,我们可以看到真正发

我有一个PHP函数,它执行一些SQL查询,一系列选择/插入

选择从标准表(InnoDB)读取,并在临时表(内存)中执行插入。它们都不是在事务中执行的(即使我想让MySQL 5.7在启用GTID时不支持在事务中使用临时表,我也不能这样做)

有一段时间,这些查询返回了一个“锁定超时超过”错误,我无法理解,因为没有事务,所有选择都是一致的读取?我也无法想象插入是一个问题,因为所有临时表的作用域都是这个线程/连接,并且只使用一次


很明显,我肯定错过了一些明显的东西?

如果您添加相关代码,我们可以看到真正发生了什么,您将使用
插入我的临时表格选择。。。从我的_real_表
?这会在实际表上导致隐式共享锁。每当您在同一个SQL语句中执行读操作时,它的行为就好像您使用了
SELECT。。。锁定共享模式
。我知道这一点,RiggsFolly,尽管我不允许发布此代码。总之,这只是一系列创建临时表的过程;插入到选择。。。奇怪的是,这个锁超时超过错误在今天之前从未发生过,现在也没有发生过,所以我不能轻易地重现它。但我还是想弄清楚这是怎么发生的。谢谢嗨,比尔,很荣幸能和你谈话!是的,确实如此。对我来说,插入temp_表SELECT对我来说是全新的。。。从real_表可以在它读取的行上放置一个共享锁(我想是这样)。那么,非常感谢。这就解释了。虽然我想这是没有办法的?