Mysql COUNT(*)是否在InnoDB中等待行锁?

Mysql COUNT(*)是否在InnoDB中等待行锁?,mysql,locking,innodb,database-performance,Mysql,Locking,Innodb,Database Performance,MySQL InnoDB表是否会等待写锁,甚至是从t中选择计数(*)之类的查询 我的情况: 我的表有50000行,有很多更新(每行都有视图)。InnoDB应该在更新的行上设置写锁。但是当我在这个表上只使用COUNT(*)进行查询时,MySQL甚至可以在不等待写锁的情况下回答这个查询,因为没有UPDATE会更改行数 非常感谢 不,MySql不会为只从表中读取数据的查询锁定InnoDb表。 这仅适用于旧的MyIsam表,所有读卡器都必须等待编写器完成,反之亦然 对于他们实现的InnoDb表 在MyS

MySQL InnoDB表是否会等待写锁,甚至是从t中选择计数(*)之类的查询

我的情况:

我的表有50000行,有很多更新(每行都有视图)。InnoDB应该在更新的行上设置写锁。但是当我在这个表上只使用
COUNT(*)
进行查询时,MySQL甚至可以在不等待写锁的情况下回答这个查询,因为没有
UPDATE
会更改行数


非常感谢

不,MySql不会为只从表中读取数据的查询锁定InnoDb表。
这仅适用于旧的MyIsam表,所有读卡器都必须等待编写器完成,反之亦然

对于他们实现的InnoDb表

在MySql术语中,它被称为

简言之,当读卡器启动查询时,数据库会在查询启动时的某个时间点对数据库进行快照,读卡器(查询)只看到在此时间点之前可见(提交)的更改,但看不到后续事务所做的更改。这允许读卡器在不锁定和等待写入器的情况下读取数据,但仍保持

根据事务隔离级别的不同,存在细微差异,您可以在此处找到详细说明:

简言之,在“读取未限制”、“读取提交”和“可重复读取”模式中,所有仅读取数据的SELECT语句(SELECT WITH FOR UPDATE或LOCK In SHARE MODE类别)都以非锁定方式执行。

在可序列化模式下,所有事务都被序列化,并且,根据自动提交模式,当SELECT与其他事务发生冲突时(当autocommit=true时),SELECT可以被阻止,或者自动转换为SELECT。。。锁定在共享模式下(当自动提交=false时)。所有细节都在上面的链接中进行了解释。

好的,请确认:更新期间是否没有行锁定,这将阻止SELECT COUNT(*)?因此,基本上每一时刻至少会更新一行,SELECT查询仍将正常执行(在可重复读取隔离级别的情况下)?谢谢是的,普通选择,包括选择计数(*),不会被更新阻止。