Table 與 View 是資料庫核心物件。本章涵蓋常用資料型別、約束定義、表建立修改刪除、View 建立與 UNION/UNION ALL 效能差異。
| 型別 | 說明 |
|---|---|
| VARCHAR2(n) | 變長字串,最大 4000 位元組 (12c+ MAX_STRING_SIZE=EXTENDED 可達 32K) |
| CHAR(n) | 固定長度字串,不足右補空白,預設長度 1 |
| NUMBER(p,s) | 數值,p 精度(總位數) 最大 38,s 小數位數,可存負數 |
| DATE | 日期時間 (含秒),範圍公元前 4712 年 ~ 公元 9999 年 |
| CLOB | 大型字元物件,最大 4GB |
| BLOB | 大型二進位物件,最大 4GB |
| BFILE | 外部二進位檔案參考,唯讀 |
| 約束 | 關鍵字 | 範例 |
|---|---|---|
| 主鍵 | PRIMARY KEY | id NUMBER PRIMARY KEY |
| 非空 | NOT NULL | name VARCHAR2(32) NOT NULL |
| 唯一 | UNIQUE | email VARCHAR2(64) UNIQUE |
| 檢查 | CHECK (條件) | gender CHAR(1) CHECK (gender IN ('M','F')) |
| 外鍵 | REFERENCES | dept_id NUMBER REFERENCES dept(id) |
| 預設值 | DEFAULT | created_at DATE DEFAULT SYSDATE |
CREATE TABLE person (
id NUMBER PRIMARY KEY,
name VARCHAR2(32),
gender CHAR DEFAULT '1'
) TABLESPACE users;
COMMENT ON TABLE person IS '人員表';
COMMENT ON COLUMN person.id IS '編號';
COMMENT ON COLUMN person.name IS '姓名';
RENAME person TO people; -- 改表名
ALTER TABLE person RENAME COLUMN name TO xingming; -- 改欄名
ALTER TABLE person ADD phone VARCHAR2(11); -- 新增欄
ALTER TABLE person ADD birthday DATE DEFAULT SYSDATE NOT NULL; -- 新增帶預設非空
ALTER TABLE person DROP COLUMN phone; -- 刪欄
ALTER TABLE person MODIFY name VARCHAR2(64); -- 擴充長度
ALTER TABLE person MODIFY gender CHAR(2); -- 改精度
ALTER TABLE person MODIFY gender VARCHAR2(2); -- 改型別
ALTER TABLE person MODIFY gender DEFAULT '2'; -- 改預設值
-- 新增主鍵
ALTER TABLE person ADD CONSTRAINT pk_person_id PRIMARY KEY (id);
-- 新增外鍵
ALTER TABLE person ADD CONSTRAINT fk_person_dept FOREIGN KEY (dept_id) REFERENCES dept(id);
-- 新增檢查
ALTER TABLE person ADD CONSTRAINT ck_person_gender CHECK (gender IN ('M','F'));
-- 設非空 (需 MODIFY)
ALTER TABLE person MODIFY name CONSTRAINT nn_person_name NOT NULL;
-- 新增唯一
ALTER TABLE person ADD CONSTRAINT uq_person_name UNIQUE (name);
-- 設定預設值
ALTER TABLE person MODIFY birthday DATE DEFAULT SYSDATE;
-- 約束啟用/停用/延遲
ALTER TABLE person DISABLE CONSTRAINT uq_person_name;
ALTER TABLE person ENABLE CONSTRAINT uq_person_name;
ALTER TABLE person DROP CONSTRAINT fk_person_dept;
ALTER TABLE person ADD CONSTRAINT fk_person_dept FOREIGN KEY (dept_id)
REFERENCES dept(id) DEFERRABLE INITIALLY DEFERRED;
TRUNCATE TABLE person; -- 清空不可回滾,釋放 High Water Mark
DELETE FROM person WHERE id > 10; -- 可回滾,產生 Undo
DROP TABLE person; -- 連結構一起刪除
CREATE OR REPLACE VIEW v_person AS
SELECT a.id, a.name, b.dept_name
FROM person a, dept b
WHERE a.dept_id = b.id;
關鍵字區別: PROCEDURE/FUNCTION 可用 IS/AS;VIEW 只能用 AS;CURSOR 只能用 IS。
UNION:合併並 去重,需排序比較,效能較低。UNION ALL:直接合併 保留重複,無排序開銷,效能顯著更高。DROP VIEW v_person;