SQL UPDATE 语句

在本教程中,你将学习如何使用 SQL 更新数据库表中的记录。

更新数据

在前面的章节中,我们学习了如何插入数据以及如何根据各种条件从数据库表中选择数据。在本教程中,我们将执行一项更重要的任务,即更新数据库表中的现有记录。

语法

UPDATE 语句用于更新表中的现有数据。

UPDATE table_nameSET column1_name = value1, column2_name = value2,...WHERE condition;

这里,column1_namecolumn2_name,…是要更新其值的数据库表的列或字段的名称。你还可以使用前面章节中学习的 ANDOR 运算符组合多个条件

警告:WHERE 在条款 UPDATE 语句指定一个或多个记录应更新。如果省略该 WHERE 子句,则将更新所有记录。

让我们看一些示例来说明它是如何工作的。

假设我们的数据库中有一个 employees 表,其中包含以下记录:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       1 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       5 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       3 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       4 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
+--------+--------------+------------+--------+---------+

更新单列

以下 SQL 语句将更新 employees 表的 emp_name 字段,并设置一个新值,其中 employee id 即 emp_id 等于 3。

UPDATE employees SET emp_name = 'Sarah Ann Connor'
WHERE emp_id = 3;

执行后,结果表将如下所示:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      1 | Ethan Hunt       | 2001-05-01 |   5000 |       1 |
|      2 | Tony Montana     | 2002-07-15 |   6500 |       5 |
|      3 | Sarah Ann Connor | 2005-10-18 |   8000 |       3 |
|      4 | Rick Deckard     | 2007-01-03 |   7200 |       4 |
|      5 | Martin Blank     | 2008-06-24 |   5600 |    NULL |
+--------+------------------+------------+--------+---------+

更新多个列

同样,你可以使用逗号分隔的列名和值对列表更新多个列。以下示例将更新 emp_id 为 5 的 employees 表中现有员工的 salarydept_id 字段。

执行后,结果表将如下所示:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      1 | Ethan Hunt       | 2001-05-01 |   5000 |       1 |
|      2 | Tony Montana     | 2002-07-15 |   6500 |       5 |
|      3 | Sarah Ann Connor | 2005-10-18 |   8000 |       3 |
|      4 | Rick Deckard     | 2007-01-03 |   7200 |       4 |
|      5 | Martin Blank     | 2008-06-24 |   6000 |       2 |
+--------+------------------+------------+--------+---------+