【问题标题】:Does MySQL update the same row one at a time?MySQL 是否一次更新同一行?
【发布时间】:2017-05-27 19:27:35
【问题描述】:

如果我同时运行十个这样的更新查询:

update table set x = x - 1 where x >= 1 

在可重复读取模式下,MySQL 是否保证所有这些更新查询一次运行一个,而不是并行运行(所有同时)?

P.S: where 子句对并行还是顺序运行有影响吗?

【问题讨论】:

  • 对于可重复阅读模式,您的意思是翻译设置为可重复阅读。请参阅dev.mysql.com/doc/refman/5.7/en/set-transaction.html???
  • 没有 WHERE 语句只过滤掉需要更新的记录。查询是否并行运行没有任何影响
  • 读取时使用的锁定应该对 UPDATE 查询没有影响。读取与更新或插入不同。它可能会影响正在读取的其他查询的执行方式,但如果您的所有查询都是更新,则不会影响结果。

标签: mysql sql sql-update atomic isolation


【解决方案1】:

它将是连续的,表/记录将被锁定直到给定的更新完成 - 请阅读以下内容

对于像 MyISAM 这样实际执行表级的存储引擎 执行 DML 或 DDL 语句时的锁,这样的语句在较旧的 影响分区表的 MySQL 版本(5.6.5 和更早版本) 对整个桌子施加了锁;也就是说,所有分区都是 锁定直到语句完成

更多细节在这里 - Partition and locking in mysql

【讨论】:

    猜你喜欢
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    相关资源
    最近更新 更多