目录
在 MySQL 中,可以使用 CASE WHEN 语句进行批量更新,这比逐条更新效率高得多。以下是几种常见的批量更新方法:
基本语法
UPDATE table_name
SET column_name = CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
...
ELSE default_value
END
WHERE condition;
示例1:根据ID批量更新不同值
UPDATE products
SET price = CASE
WHEN id = 1 THEN 10.99
WHEN id = 2 THEN 15.99
WHEN id = 3 THEN 20.50
ELSE price
END
WHERE id IN (1, 2, 3);
示例2:基于另一列的值更新
UPDATE employees
SET bonus = CASE
WHEN salary > 10000 THEN salary * 0.15
WHEN salary > 5000 THEN salary * 0.10
ELSE salary * 0.05
END;
示例3:多列批量更新
UPDATE students
SET
grade = CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'D'
END,
status = CASE
WHEN score >= 70 THEN 'PASS'
ELSE 'FAIL'
END
WHERE exam_id = 101;
示例4:使用JOIN进行批量更新
UPDATE orders o
JOIN order_updates ou ON o.id = ou.order_id
SET
o.status = CASE
WHEN ou.new_status IS NOT NULL THEN ou.new_status
ELSE o.status
END,
o.amount = CASE
WHEN ou.discount > 0 THEN o.amount * (1 - ou.discount)
ELSE o.amount
END
WHERE ou.batch_id = 123;
注意事项
-
WHERE 子句很重要,确保只更新需要的行
-
对于大量数据更新,考虑分批处理以避免锁表时间过长
-
在执行前最好先备份数据或使用事务
-
可以使用
LIMIT限制每次更新的行数
性能提示
对于非常大的批量更新,可以先创建临时表存储更新数据,然后使用 JOIN 方式进行更新,通常性能更好。
-- 创建临时表
CREATE TEMPORARY TABLE temp_updates (
id INT PRIMARY KEY,
new_value VARCHAR(255)
);
-- 插入更新数据
INSERT INTO temp_updates VALUES (1, 'value1'), (2, 'value2'), ...;
-- 执行批量更新
UPDATE main_table m
JOIN temp_updates t ON m.id = t.id
SET m.column = t.new_value;
582

被折叠的 条评论
为什么被折叠?



