Mysql批量更新

目录

基本语法

示例1:根据ID批量更新不同值

示例2:基于另一列的值更新

示例3:多列批量更新

示例4:使用JOIN进行批量更新

注意事项

性能提示


在 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;

注意事项

  1. WHERE 子句很重要,确保只更新需要的行

  2. 对于大量数据更新,考虑分批处理以避免锁表时间过长

  3. 在执行前最好先备份数据或使用事务

  4. 可以使用 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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值