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
语句,我们可以根据多个条件执行不同的更新操作,实现灵活且高效的数据更新。