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 |
+--------+------------------+------------+--------+---------+