| 類別 | 全稱 | 核心指令 | 核心職能 |
|---|---|---|---|
| DQL | Data Query Language | SELECT | 資料查詢 |
| DML | Data Manipulation Language | INSERT/UPDATE/DELETE/MERGE | 資料操縱 |
| DDL | Data Definition Language | CREATE/ALTER/DROP/TRUNCATE/RENAME | 結構定義 |
| DCL | Data Control Language | GRANT/REVOKE | 權限控制 |
本文深度聚焦DML與DDL實戰操作。
-- 完整欄位列表(推薦,結構變更不影響)
INSERT INTO customers(cust_id, state, post_code)
VALUES ('ARIEL', NULL, '94501');
-- 省略欄位(按COLUMN_ID順序,風險高)
INSERT INTO customers VALUES ('ARIEL', NULL, '94501');
-- 子查詢插入
INSERT INTO dept_summary(deptno, emp_cnt, avg_sal)
SELECT deptno, COUNT(*), AVG(sal) FROM emp GROUP BY deptno;
關鍵規則: 值數量/型別與欄位對應、隱式轉換風險、NULL關鍵字與空字串語意不同。
-- 單表更新
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');
-- 多表更新(Oracle專有)
UPDATE (
SELECT e.sal AS old_sal, b.bonus_rate
FROM emp e, bonus_policy b
WHERE e.deptno = b.deptno
) SET old_sal = old_sal * (1 + bonus_rate);
DELETE FROM po_lines
WHERE ship_to_state IN ('TX','NY','IL')
AND order_date < SYSDATE - 365;
風險控制: 生產環境DELETE前必須先SELECT驗證、備份邏輯備份、考慮WHERE ROWNUM <= N分批刪除。
TRUNCATE TABLE [schema.]table [DROP|REUSE STORAGE];
| 特性 | DELETE | TRUNCATE |
|---|---|---|
| 語言類別 | DML | DDL |
| 速度 | 逐行刪除,產生UNDO/REDO | 極快,重置High Water Mark |
| 回滾 | 可ROLLBACK | 不可回滾(隱式COMMIT) |
| 觸發器 | 觸發DELETE觸發器 | 不觸發 |
| 高水位線 | 不重置 | 重置至初始 |
| 外鍵約束 | 受限制 | 父表不可TRUNCATE |
| 空間釋放 | DROP STORAGE預設釋放 | REUSE STORAGE保留 |
SELECT * FROM emp WHERE deptno = 10 FOR UPDATE [NOWAIT|WAIT n|SKIP LOCKED];
鎖定查詢行,阻塞其他Session UPDATE/DELETE/SELECT FOR UPDATE,允許單純SELECT。
LOCK TABLE inventory IN EXCLUSIVE MODE; -- 排他鎖
LOCK TABLE inventory IN SHARE MODE; -- 共享鎖
阻塞該表上所有DML操作,適用於批次維護窗口。
COMMENT ON TABLE/COLUMN ... IS '...' 建立數據字典-- 增加欄位(線上操作,11g+支援DEFAULT值元數據更新)
ALTER TABLE emp ADD (email VARCHAR2(100) DEFAULT 'unknown@company.com');
-- 修改欄位(注意資料相容性)
ALTER TABLE emp MODIFY (salary NUMBER(10,2) NOT NULL);
-- 刪除欄位(12c+支援SET UNUSED延遲物理刪除)
ALTER TABLE emp DROP COLUMN old_flag;
-- 重命名
RENAME old_table TO new_table;
ALTER TABLE emp RENAME COLUMN ename TO emp_name;
FORALL + BULK COLLECT,減少Context SwitchAPPEND Hint + NOLOGGING(配合備份策略)PARTITION EXTENSION語法精準操作分區DBMS_STATS.GATHER_TABLE_STATS 替代 ANALYZE掌握DML/DDL的語法細節、行為差異(特別是DELETE vs TRUNCATE、DML vs DDL隱式提交)、鎖機制與效能特徵,是資料庫開發與管理的核心基本功。建立標準化操作手冊,嚴格執行變更管理流程,可消除90%以上的人為操作風險。