有没有一种方法可以在不使用脚本的情况下通过一次只执行一定数量的行来运行不会减慢数据库速度的更新?
我在表演
UPDATE .. SET .. FROM .. INNER JOIN .. ON ... WHERE
它将更新一个非常大的表中的 3,171 行。
我不想锁定数据库或减慢它的速度。有什么想法吗?
注意:
根据 UPDATE 的 MySQL 文档:对于多表语法,UPDATE 更新在 table_references 中命名的每个表中满足条件的行。在这种情况下,不能使用 ORDER BY 和 LIMIT。
我正在执行 INNER JOIN 并且不允许使用 LIMIT,在这种情况下使用 LIMIT 作为解决方案不起作用。
最佳答案
信不信由你,你可以使用LIMIT
!
UPDATE mytable SET ... WHERE ... LIMIT 10;
我知道这听起来很奇怪,而且它是不确定的,但它非常方便!
编辑
但是,对于更新连接,限制是不支持的。但是,有一个解决方案!
使用变量来控制更新多少行。以下是其工作原理的概览:
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';
在这里,我正在更新符合连接条件的前 100 行/后 100 行 - 您可以将其设置为您喜欢的任何数字。
关于mysql - 如何一次只更新几行? (多表语法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9318812/