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

标签 mysql

有没有一种方法可以在不使用脚本的情况下通过一次只执行一定数量的行来运行不会减慢数据库速度的更新?

我在表演

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/

相关文章:

MySQL如何在分组时有条件地排除记录

mysql - 从多列中选择多行作为一列

mysql - 从日期字段mysql中提取年和月

python - 插入 MySQL 时出错

php - 通过单击按钮填充 PHP 数组

java - 为什么 MySQL 数据库返回空结果集,尽管数据应该是正确的

php - 在 php 中从 mysql 格式化日期时间

php - 如何循环遍历一个表,跳过每 11 行,同时每 10 次循环执行某些操作?

php - MySQL 如果第一次输入是从 2016 年开始选择客户

mysql - 存储过程 MySql 中的疑问 - 如何为变量返回多个值?