首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在InnoDB中是否计算(*)等待行锁?

在InnoDB中是否计算(*)等待行锁?
EN

Stack Overflow用户
提问于 2014-11-17 13:10:50
回答 1查看 6K关注 0票数 4

MySQL InnoDB表是否等待写锁,甚至等待查询(如SELECT COUNT(*) FROM t )

我的处境:

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

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-18 01:43:23

不,对于只从表中读取数据的查询,MySql不锁定InnoDb表。

这只是旧的MyIsam表的情况,所有的读取器都必须等待写入器完成,反之亦然。

对于InnoDb表,他们实现了多版本并发控制

在MySql术语中,它被称为一致非锁定读取

简而言之,当读取器启动查询时,数据库会在查询启动的某个时间点对数据库进行快照,而读取器(查询)只会看到到此时为止可见的更改(已完成),但不会看到以后的事务所做的更改。这允许读取器读取数据,而无需锁定和等待写入器,但仍然保留

根据事务隔离级别的不同,有细微的差异,您可以在这里找到详细的描述:http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html

简而言之,所有只读取数据的SELECT语句(SELECT不用于更新或锁定共享模式类)都以非锁定方式执行。

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26973483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档