批量与连表更新要点
- 连表更新:UPDATE 表A JOIN 表B ON 条件 SET 表A.列 = 表B.列
- CASE WHEN 给不同行按条件赋不同值
- 区间分支要从小到大排,避免前面的分支吞掉后面的
- 批量更新先用同样的 JOIN 写 SELECT 验证范围
- 大批量建议分批 + LIMIT,避免长事务锁表
- 连表更新可同时引用多张表的数据做计算
批量与连表更新示例
UPDATE user u JOIN orders o ON u.id = o.user_id
SET u.last_amount = o.amount
WHERE o.created_at BETWEEN '2024-01-01' AND '2024-06-30';
UPDATE product SET price = CASE
WHEN price BETWEEN 0 AND 99 THEN price * 0.9
WHEN price BETWEEN 100 AND 499 THEN price * 0.8
ELSE price * 0.7 END;
避坑提醒:CASE WHEN 区间判断务必从小到大,否则小区间被大区间的前置分支抢先命中,后面分支永远走不到。