我有一个Select查询,它在一个记录超过4百万的事务表上执行。每当我执行此查询时,我发现该特定事务表上的所有写入和更新操作都将暂停,我们开始从java端获取锁定等待超时超出的异常,尝试重新启动事务。当前锁定等待超时设置为200秒。我无法理解为什么select语句可以在表上创建这样的锁并阻止所有insert / update语句。表存储引擎是InnoDb,主键是自动增量键。 MySQL版本是5.1.40。 我也没有在执行select语句之前启动任何事务。
任何想法?
答案 0 :(得分:0)
所以,是的,你在一个事务中的SELECT读取锁定该表的记录,并且触摸相同记录的写操作必须等到读事务完成(如果它跟随两个锁相)。
This document可能有助于理解innodb锁模型