【发布时间】:2020-11-14 13:31:36
【问题描述】:
假设我运行了这个语句:
UPDATE Employees set country='AU'
在 InnoDB 表中,Employees,大约有 1000 万行。
其他用户也通过如下 SQL 查询积极更新此表:
例如一个用户,ID = 20,将他们的国家更改为新西兰:
UPDATE Employees set country='NZ' where id = 20
- 在这种情况下,是否会对该表块进行任何进一步的更新,直到 一般更新完成了吗?
- 如果是这样,有没有办法允许特定的 更新和一般更新同时运行(如果不是) 更新同一行? (为了澄清我在这里的意思:假设 一般更新完成更新 ID 为 1 - 50 的员工,并且是 现在更新员工 51 - 约 1000 万,单次更新 id 为 20 的员工无需等待 一般更新完成)
【问题讨论】:
-
用一个
UPDATE改变一个表的所有行是很不正常的。如果该表仅用于澳大利亚,为什么还要有country列? -
对不起,国家可能不是一个很好的例子。在生产中,我们每天都会为所有用户将某些计数器重置为零。
-
50M 行?计数器是否每天更新一次以上? (如果没有,有一个简单的解决方法。)
标签: mysql sql-update mariadb innodb table-locking