Mysql 为什么innoDB会锁定表

Mysql 为什么innoDB会锁定表,mysql,innodb,table-locking,database-engine,Mysql,Innodb,Table Locking,Database Engine,我在AWS上使用innoDB。我在日志中不断收到大量以下消息: 等待表级锁 我以为innoDB只提供行级锁。我的代码中没有任何锁表。有人知道为什么会发生这种情况吗?innoDB会在某些情况下执行表锁(如AUTO-INC)。请参阅本文,了解这方面的内容,并了解是否适用于您的情况: 还要检查在MySQL配置中是否设置或设置innodb_table_locks=0。有关文档,请参阅此处:当innodb table locks出现在图片中时,有某些原因: 1) 如果InnoDB_table_locks=

我在AWS上使用innoDB。我在日志中不断收到大量以下消息:

等待表级锁


我以为innoDB只提供行级锁。我的代码中没有任何锁表。有人知道为什么会发生这种情况吗?

innoDB会在某些情况下执行表锁(如AUTO-INC)。请参阅本文,了解这方面的内容,并了解是否适用于您的情况:


还要检查在MySQL配置中是否设置或设置innodb_table_locks=0。有关文档,请参阅此处:

当innodb table locks出现在图片中时,有某些原因:

1) 如果
InnoDB_table_locks=1
(默认值)和
autocommit=0
,则InnoDB知道表锁,并且InnoDB上面的MySQL层知道行级锁

您应该设置
innodb\u table\u locks=0
并重新启动MySQL服务器

2) 在初始化表上先前指定的
AUTO_INCREMENT
列时,InnoDB在与AUTO_INCREMENT列关联的索引末尾设置独占锁。在访问自动递增计数器时,InnoDB使用特定的
auto-INC
表锁模式,其中锁仅持续到当前SQL语句的末尾,而不是整个事务的末尾。当持有
AUTO-INC
表锁时,其他客户端无法插入到表中


您也可以参考这篇博文:

通读一下,因为MySQL 5.5的行锁定问题变得更加棘手(stric?t)。在5.5之前,select不会导致锁定,从5.5开始,它会导致锁定;(.更多信息请点击此处: