在MySQL中,你可以使用多种方法来批量更新多行数据。以下是两种常见的方法:

方法一:使用CASE语句和IN子句

UPDATE 表名
SET 列名 = 
    CASE 
        WHEN 条件1 THEN 值1
        WHEN 条件2 THEN 值2
        ...
        ELSE 默认值
    END
WHERE 主键列 IN (值1, 值2, ...);

说明:

  • 将'表名'替换为要更新数据的表名。
  • 将'列名'替换为要更新的列名。
  • 在CASE语句中,根据需要添加多个WHEN条件,并为每个条件指定对应的值。
  • ELSE子句用于在没有满足任何条件时提供默认值。
  • 将'主键列'替换为标识唯一行的主键列名。
  • 在WHERE子句中,使用IN操作符并提供要更新的行的主键值列表。

例如,假设有一个名为'employees'的表,其中包含'employee_id'和'salary'等列。如果要将ID为1、2和3的员工的工资都增加1000,可以使用以下语句:

UPDATE employees
SET salary = 
    CASE 
        WHEN employee_id = 1 THEN salary + 1000
        WHEN employee_id = 2 THEN salary + 1000
        WHEN employee_id = 3 THEN salary + 1000
        ELSE salary
    END
WHERE employee_id IN (1, 2, 3);

方法二:使用临时表或子查询

UPDATE 表名
JOIN (SELECT 主键列, 列名 FROM 表名 WHERE 条件) AS temp
ON 表名.主键列 = temp.主键列
SET 表名.列名 = temp.列名;

说明:

  • 将'表名'替换为要更新数据的表名。
  • 将'主键列'和'列名'替换为对应的列名。
  • 在子查询中,根据需要添加条件来筛选要更新的行。
  • 通过使用JOIN子句连接原始表和子查询的结果,并根据主键列进行匹配。
  • 使用SET子句将子查询中的值更新到原始表中的对应列。

例如,使用上述'employees'表的示例,如果要将工资大于5000的所有员工的工资增加10%,可以使用以下语句:

UPDATE employees
JOIN (SELECT employee_id, salary FROM employees WHERE salary > 5000) AS temp
ON employees.employee_id = temp.employee_id
SET employees.salary = temp.salary * 1.1;

这些方法允许你一次性更新多行数据,提高了更新的效率。在实际使用时,请确保根据需要选择适合的方法,并根据情况进行测试和备份数据。

MySQL 批量更新多行数据:两种常用方法详解

原文地址: https://www.cveoy.top/t/topic/nYY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录