MySQL UPDATE 可以用 CASE

在数据库管理系统中,更新操作是常见的操作之一,用于修改表中的记录。MySQL 中,UPDATE 是用来更新表中现有记录的关键字。
在进行更新操作时,有时候我们需要根据不同的条件更新表中的记录。这时就可以使用 CASE 关键字来实现根据条件执行不同的更新操作。
什么是 CASE 语句?
CASE 语句是 SQL 中的一种条件语句,用于根据不同的条件执行不同的操作。CASE 语句可以在 SELECT、UPDATE 和 DELETE 语句中使用。
CASE 语句有两种形式:CASE 和 CASE WHEN。
CASE形式:
CASE expr
WHEN search_condition THEN result
[WHEN search_condition THEN result ...]
[ELSE result]
END
CASE WHEN形式:
CASE
WHEN search_condition THEN result
[WHEN search_condition THEN result ...]
[ELSE result]
END
MySQL UPDATE 中使用 CASE
在 MySQL 中,可以在 UPDATE 语句中使用 CASE 来根据不同的条件更新表中的记录。下面是使用 CASE 的 UPDATE 语法:
UPDATE table_name
SET column_name =
CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
...
ELSE default_value
END,
another_column =
CASE
WHEN condition3 THEN value3
WHEN condition4 THEN value4
...
ELSE default_value
END
WHERE condition;
其中,column_name 和 another_column 是需要更新的列名,condition1, condition2, condition3, condition4 是条件, value1, value2, value3, value4 是对应条件的更新值,default_value 是默认更新值,WHERE 子句是更新的条件。
下面我们通过一个实际的示例来说明如何在 MySQL 中使用 CASE 的 UPDATE 语句。
假设有一个员工表 employees,包含 id, name, salary 三个字段,我们需要根据员工的薪水等级来调整他们的工资。假设薪水等级分为三级:1、2和3,我们要将薪水等级为 1 的员工增加 500,薪水等级为 2 的员工增加 300,薪水等级为 3 的员工增加 100。
下面是对应的 UPDATE 语句:
UPDATE employees
SET salary =
CASE
WHEN salary_level = 1 THEN salary + 500
WHEN salary_level = 2 THEN salary + 300
WHEN salary_level = 3 THEN salary + 100
ELSE salary
END
WHERE department = 'Engineering';
在这个 UPDATE 语句中,我们根据 salary_level 的不同值来对员工的薪水进行不同的调整,并且限定条件为 department 为 ‘Engineering’。
示例
让我们通过一个具体的示例来演示上面给出的 UPDATE 语句的使用。
首先,创建一个名为 employees 的表,并插入一些数据:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
salary INT,
salary_level INT,
department VARCHAR(50)
);
INSERT INTO employees (id, name, salary, salary_level, department)
VALUES (1, 'Alice', 2000, 1, 'Engineering'),
(2, 'Bob', 3000, 2, 'Engineering'),
(3, 'Charlie', 4000, 3, 'HR'),
(4, 'David', 2500, 1, 'Engineering'),
(5, 'Eve', 3500, 2, 'HR');
现在,我们来执行上面给出的 UPDATE 语句:
UPDATE employees
SET salary =
CASE
WHEN salary_level = 1 THEN salary + 500
WHEN salary_level = 2 THEN salary + 300
WHEN salary_level = 3 THEN salary + 100
ELSE salary
END
WHERE department = 'Engineering';
执行以上 UPDATE 语句后,再来查询 employees 表的数据:
SELECT * FROM employees;
查询结果如下:
+----+--------+--------+--------------+-------------+
| id | name | salary | salary_level | department |
+----+--------+--------+--------------+-------------+
| 1 | Alice | 2500 | 1 | Engineering |
| 2 | Bob | 3300 | 2 | Engineering |
| 3 | Charlie| 4000 | 3 | HR |
| 4 | David | 3000 | 1 | Engineering |
| 5 | Eve | 3500 | 2 | HR |
+----+--------+--------+--------------+-------------+
我们可以看到,根据员工的薪水等级,使用 CASE 的 UPDATE 语句成功地对员工的薪水进行了调整。
总结
本文介绍了在 MySQL 中使用 CASE 的 UPDATE 语句来根据不同的条件更新表中的记录。通过 CASE 语句,我们可以根据多个条件执行不同的更新操作,实现灵活且高效的数据更新。
极客笔记