如何一次只更新几行?(多表语法)

KRB*_*KRB 5 mysql

有没有办法不使用脚本来运行UPDATE,它不会通过一次只执行一定数量的行来减慢DB的速度?

我正在表演

UPDATE .. SET .. FROM .. INNER JOIN .. ON ... WHERE
Run Code Online (Sandbox Code Playgroud)

它将在一个非常大的表中更新3,171行.

我不想锁定DB或减慢它.有任何想法吗?

注意:

根据用于UPDATE的MySQL文档:对于多表语法,UPDATE更新table_references中指定的满足条件的每个表中的行.在这种情况下,不能使用ORDER BY和LIMIT.

我正在执行INNER JOIN并且不允许使用LIMIT,使用LIMIT作为解决方案在这种情况下不起作用.

Boh*_*ian 5

信不信由你,你可以使用LIMIT!

UPDATE mytable SET ... WHERE ... LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

我知道这听起来很奇怪,而且它是非确定性的,但它非常方便!

编辑

但是,要更新联接,支持限制.但是,有一个解决方案!

使用变量来控制更新的行数.以下是它的工作原理:

set @i := 0;
update table1 t1
join table2 t2 on t1.keycol = t2.keycol and (@i := @i + 1) < 100
where t1.col != 'someval'
set t1.col = 'someval';
Run Code Online (Sandbox Code Playgroud)

在这里,我正在更新符合连接条件的第一个/下一个100行 - 您可以将其设置为您喜欢的任何数字.