用限制mysql并发更新

lla*_*aro 5 mysql query concurrency

我想知道是否同时 UPDATE .... LIMIT N 不会与查询数据库的多个客户端重叠。

在 UPDATE ... LIMIT N 之后,客户端将使用分配的一些 client_id 进行 SELECT。我不希望客户端重叠结果,因此每次更新后使用 SELECT 查询数据库时,每个客户端都会有不同的记录。

这取决于表引擎?

更新锁定表/记录?(我确定这取决于引擎)。

我认为 UPDATE LIMIT 不应重叠结果,dbs 具有 ACID 属性......我想确认这一点。

Der*_*ney 5

这取决于表引擎?

是的。MyISAM 会锁表,InnoDB 会锁行

如果您正在寻找 ACIDity,您将希望使用 InnoDB。本文档页面中描述InnoDB 如何处理锁定

上述文档页面上的以下用户评论说明了 InnoDB 在大型表上的性能缺陷:

主要问题:在使用索引更新期间行被锁定。例如,UPDATE tab SET col1=3 WHERE col2=17;除非 col2 被索引,否则将锁定整个表(在这种情况下,只有 col2=17 的行将被锁定)。

为了扩展上述注释,任何为更新/删除执行表扫描的操作都将锁定表中的所有行

课外阅读

TL;DR:InnoDB 索引锁是主要的架构性能缺陷,这就是为什么你听说大表更慢的原因。很有可能有更多可扩展的磁盘写入引擎,并且所有大型 InnoDB 写入/插入基准都受到了严重影响。