SQL 分四大類:DQL (查詢)、DML (操縱)、DDL (定義)、DCL (控制)。本文聚焦 DML 與 DCL 在 Oracle 實作細節。
| 語句 | 用途 |
|---|---|
| INSERT | 新增資料列 |
| UPDATE | 修改現有資料 |
| DELETE | 刪除資料列 |
| SELECT FOR UPDATE | 鎖定查詢列,防他人修改 |
| LOCK TABLE | 鎖定整張表,阻擋 DML |
ALL_TAB_COLUMNS 等字典視圖。NULL 關鍵字或空字串寫入 NULL。INSERT INTO customers(cust_id, state, post_code) VALUES('Ariel', NULL, '94501');
-- 等同
INSERT INTO customers(cust_id, state, post_code) VALUES('Ariel', , '94501');
UPDATE order_rollup
SET (qty, price) = (SELECT SUM(qty), SUM(price) FROM order_lines WHERE customer_id='KOHL')
WHERE cust_id='KOHL' AND order_period=TO_DATE('01-Oct-2000');
| 特性 | DELETE | TRUNCATE |
|---|---|---|
| 速度 | 逐列刪除,慢 | DDL,極快 |
| ROLLBACK | 可回滾 | 隱性提交,不可回滾 |
| High Water Mark | 不重置 | 重置 HWM 及索引 |
| Trigger | 觸發 DELETE Trigger | 不觸發 |
| 權限 | 可授予 | 不可授予他人 TRUNCATE |
| 外鍵限制 | 受限 | 父表不可 TRUNCATE |
TRUNCATE TABLE [schema.]table [DROP|REUSE STORAGE];
-- DROP STORAGE (預設):釋放空間、重置 NEXT
-- REUSE STORAGE:保留空間分配
鎖定符合條件的列,他人可查詢但不可修改/鎖定。
LOCK TABLE [schema.]table IN lock_mode;
-- lock_mode: SHARE (共享) / EXCLUSIVE (排他)
控制用戶權限:GRANT、REVOKE、CREATE USER、ALTER USER、DROP USER、角色管理、審計等。配合 SYSDBA/SYSOPER 特權管理 (見密碼檔文章)。