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

时间:2012-02-16 20:49:06

标签: mysql

有没有一种方法可以不使用脚本来运行UPDATE,它不会通过一次只执行一定数量的行来减慢数据库的速度?

我正在表演

UPDATE .. SET .. FROM .. INNER JOIN .. ON ... WHERE

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

我不想锁定数据库或减慢速度。有什么想法吗?

注:

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

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

3 个答案:

答案 0 :(得分:5)

信不信由你,你可以使用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行 - 您可以将其设置为您喜欢的任何数字。

答案 1 :(得分:1)

如果可能,您可以先选择要更新的行的ID,然后在ID的这个子集上运行更新查询

Update tbl set MyKey = 'Updated' where ID between 1000 AND 2000

答案 2 :(得分:1)