首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> SQL 基礎

SQL UPDATE 語句完整教學:更新資料語法、WHERE 關鍵性與安全實務

     編輯:SQL 基礎

SQL UPDATE 語句完整教學


UPDATE 用於修改資料表中現有資料列的欄位值。同樣極度依賴 WHERE 子句,省略將導致全表欄位被更新,後果嚴重。


基本語法

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE some_column = some_value;
  • SET 子句指定要更新的欄位與新值,多欄位用逗號分隔。
  • WHERE 子句限定更新範圍。
  • 省略 WHERE 將更新表中所有列的指定欄位!

演示資料庫:RUNOOB 範例資料

Websites 表(更新前)

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶         | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程     | https://www.runoob.com/    | 4689  | CN      |
| 4  | 微博         | https://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
+----+--------------+---------------------------+-------+---------+

實戰範例

範例:更新 '菜鳥教程' 的 alexa 為 5000、country 為 USA

UPDATE Websites
SET alexa = '5000', country = 'USA'
WHERE name = '菜鳥教程';

執行後讀取 Websites 表:

僅 id=3 的資料被修改,其餘不變。


⚠️ UPDATE 警告:省略 WHERE 的災難後果

UPDATE Websites
SET alexa = '5000', country = 'USA';

上述指令將把 Websites 表所有資料的 alexa 改為 5000、country 改為 USA。無 WHERE 保護的 UPDATE 執行前請三思,並在交易中驗證。


進階 UPDATE 技巧

1. 使用子查詢更新

UPDATE Products
SET price = price * 1.1
WHERE category_id IN (SELECT id FROM Categories WHERE name = 'Electronics');

2. 多表聯結更新(語法因資料庫而異)

MySQL:

UPDATE Orders o
JOIN Customers c ON o.customer_id = c.id
SET o.status = 'VIP'
WHERE c.level = 'Gold';

SQL Server:

UPDATE o
SET o.status = 'VIP'
FROM Orders o
JOIN Customers c ON o.customer_id = c.id
WHERE c.level = 'Gold';

3. 使用 CASE 條件更新

UPDATE Employees
SET bonus = CASE
  WHEN performance = 'A' THEN salary * 0.2
  WHEN performance = 'B' THEN salary * 0.1
  ELSE 0
END;

安全操作最佳實務

  1. 先 SELECT 驗證:確認 WHERE 條件精確鎖定目標列。
  2. 交易包裹:BEGIN; UPDATE ...; -- 檢查筆數 COMMIT;
  3. 限制影響範圍:可加 LIMIT(MySQL)或 TOP(SQL Server)作為雙重保險。
  4. 審計日誌:重要表啟用觸發器或 CDC 記錄變更歷程。
  5. 測試環境先行:生產部署前在 Staging 完整演練。

效能提示

  • WHERE 條件欄位加索引,避免全表掃描鎖定大量列。
  • 大批次更新分批提交,減少鎖爭用與交易記錄膨脹。
  • 避免更新索引欄位(特別是叢集索引鍵),導致頁分裂。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved