基本語法
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
範例
-- 將 Module 表中 Moduleid='5' 的記錄,ModuleName 改為 'add Module'
UPDATE Module
SET ModuleName = 'add Module'
WHERE Moduleid = '5';
關鍵提醒
- WHERE 子句不可省略:缺少 WHERE 會更新全表所有列,造成災難性後果。生產環境建議先用
SELECT * FROM table WHERE ... 確認影響筆數。
- 字串常數用單引號:Oracle 單引號包裹字串,雙引號保留給識別符(區分大小寫)。
- 隱式型別轉換風險:
WHERE Moduleid = '5' 會觸發字串轉數字,若欄位為 NUMBER 建議寫 WHERE Moduleid = 5 以利索引使用。
- 大量更新效能:超過萬筆考慮分批次
COMMIT 或使用 FORALL 批次綁定(PL/SQL)。
- 外鍵/觸發器連鎖:更新父表主鍵或觸發 AFTER UPDATE 觸發器可能級聯大量操作,評估鎖爭用與執行時間。
進階用法速查
| 場景 | 語法範例 |
| 多表關聯更新 | UPDATE (SELECT t.col1, s.col2 FROM t JOIN s ON t.id=s.t_id WHERE ...) SET col1 = col2 |
| 子查詢賦值 | UPDATE t SET col = (SELECT MAX(val) FROM s WHERE s.t_id = t.id) WHERE EXISTS (...) |
| RETURNING 子句 | UPDATE t SET col = val WHERE id = 1 RETURNING col INTO :v_new_val(PL/SQL 取回新值) |
| 條件式更新 | UPDATE t SET col = CASE WHEN cond THEN v1 ELSE v2 END |