已經存在在table裡面的那些record做更新。
※ 語法

UPDATE [LOW_PRIORITY] [IGNORE] table_name
SET
column_name1 = expr1,
column_name2 = expr2,
…
[WHERE
condition];
- UPDATE [LOW_PRIORITY] [IGNORE] table_name:
- UPDATE 關鍵字用來指定要更新的表格。
- LOW_PRIORITY 是一個選項,表示這個更新操作的優先順序較低。
- IGNORE 是另一個選項,表示在更新過程中忽略不合法的更新。
- SET column_name1 = expr1, column_name2 = expr2, …:
- SET 關鍵字用來指定要更新的欄位及其新值。
- column_name1 = expr1 表示將 column_name1 欄位更新為 expr1 的值。
- [WHERE condition]:
- WHERE 子句是可選的,用來指定更新的條件。
- 如果有 WHERE 子句,則只更新符合條件的記錄。
- 如果沒有 WHERE 子句,則更新整個表格中的所有記錄。
- IGNORE:
- 如果使用 IGNORE 關鍵字,則在更新過程中忽略不合法的更新。
- 例如,如果嘗試將一個記錄的 ID 更新為已存在的 ID,這是不合法的更新。
- 使用 IGNORE 關鍵字時,不合法的更新會被忽略,合法的更新會繼續進行。
※ 解析順序

- 選擇表格:首先,
UPDATE
後面接的是要更新的表格名稱。 - 篩選記錄:接著,利用
WHERE
子句來篩選出要更新的記錄。如果沒有寫WHERE
,則會更新整個表格中的所有記錄。 - 設定更新內容:最後,在
SET
子句中告訴 SQL 我們要如何更新選進來的記錄。
※ 實例
- Update Single Column
假設我們有一個名為 employees
的表格,其中包含員工的資訊。我們想要更新員工編號為 101 的員工的薪水。
UPDATE employees
SET salary = 60000
WHERE employee_id = 101;
解析順序如下:
- 選擇表格:
UPDATE employees
指定要更新的表格是employees
。 - 設定更新內容:
SET salary = 60000
指定要將salary
欄位更新為 60000。 - 篩選記錄:
WHERE employee_id = 101
篩選出員工編號為 101 的記錄。
• Update Multiple Column
假設我們有一個名為 employees
的表格,其中包含員工的資訊。我們想要更新員工編號為 101 的員工的薪水和職位。
UPDATE employees
SET salary = 60000,
position = 'Senior Developer'
WHERE employee_id = 101;
解析順序如下:
- 選擇表格:
UPDATE employees
指定要更新的表格是employees
。 - 設定更新內容:
SET salary = 60000, position = 'Senior Developer'
指定要將salary
欄位更新為 60000,並將position
欄位更新為 ‘Senior Developer’。 - 篩選記錄:
WHERE employee_id = 101
篩選出員工編號為 101 的記錄。
• REPLACE function
假設我們有一個名為 products
的表格,其中包含產品的名稱。我們想要將所有產品名稱中的 “Old” 替換為 “New”。
UPDATE products
SET product_name = REPLACE(product_name, 'Old', 'New');
※ 使用 REPLACE
函數時,參數的位置:
REPLACE(替換操作的原始字串, 要被替換的子字串, 用來替換的子字串)
解析順序如下:
- 選擇表格:
UPDATE products
指定要更新的表格是products
。 - 設定更新內容:
SET product_name = REPLACE(product_name, 'Old', 'New')
指定要將product_name
欄位中的 “Old” 替換為 “New”。 - 篩選記錄:這裡沒有
WHERE
子句,因此會更新表格中的所有記錄。
※ UPDATE JOIN
※ 使⽤時機
當我們需要使用另一個表格的資訊來更新時,就需要使用 JOIN
Table來合併表格。
※ 語法

- 選擇表格:首先,指定要更新的表格(left table)。
- 合併表格:使用
JOIN
(可以是INNER JOIN
或LEFT JOIN
)來合併表格,並在ON
子句中指定合併條件。 - 篩選記錄:利用
WHERE
子句篩選出要更新的記錄。 - 設定更新內容:在
SET
子句中指定要更新的欄位和更新方式,可以使用表格中的欄位(例如,使用t2
的欄位來更新t1
的欄位)或函數(例如,REPLACE
函數或CONCAT
函數)來更新。
※ 解析順序

- 確定 right table 和 left table:首先要確定你要更新的表格(left table)和你要用來匹配的表格(right table)。
- 合併表格:根據你選擇的 JOIN 方式(例如 INNER JOIN, LEFT JOIN 等),將兩個表格合併在一起。
- 篩選記錄:使用 WHERE 子句來篩選出你想要更新的記錄。這一步是基於合併後的表格來進行的。
- 更新記錄:最後,使用 SET 子句來更新篩選出的記錄。
※ 實例
設我們有兩個表格:employees
和 departments
。我們希望更新 employees
表格中的 department_name
欄位,根據 departments
表格中的 department_id
來匹配。
-- 更新 students 表格中的 grade 欄位
UPDATE students AS s
JOIN grades AS g ON s.student_id = g.student_id
SET s.grade = g.grade
WHERE g.exam_date = '2024-08-01';
解析順序如下:
- 確定 right table 和 left table:
students
是 left table,grades
是 right table。 - 合併表格:使用
JOIN
將students
和grades
表格根據student_id
欄位合併。 - 篩選記錄:使用
WHERE
子句篩選出grades
表格中exam_date
為 ‘2024-08-01’ 的記錄。 - 更新記錄:使用
SET
子句更新students
表格中的grade
欄位。