基本建表
CREATE TABLE books (
bookid INTEGER,
bookname VARCHAR(100),
isbn CHAR(10)
);
複製表結構 (LIKE)
CREATE TABLE mybooks LIKE books;
指定表空間
CREATE TABLE t1 (c1 INT) IN ts1;
CREATE TABLE t2 (c1 FLOAT) IN ts1;
刪除表
DROP TABLE tab_name;
欄位增刪
-- 新增
ALTER TABLE test ADD COLUMN c2 CHAR(8);
-- ⚠️ DB2 不支援直接 DROP COLUMN
-- 需重建表或使用 ADMIN_MOVE_TABLE 遷移
欄位屬性修改與約束
1. 修改長度/型別
ALTER TABLE tab_name ALTER COLUMN c1 SET DATA TYPE VARCHAR(20);
2. 設定 NOT NULL
ALTER TABLE tab_name ALTER COLUMN c1 SET NOT NULL;
-- 或建表時
CREATE TABLE tab_name (id INTEGER NOT NULL);
3. 設定預設值
CREATE TABLE tab_name (
id INTEGER,
name VARCHAR(10) WITH DEFAULT 'none'
);
4. 自動遞增 (IDENTITY)
CREATE TABLE tab_name (
id INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)
);
5. 唯一性約束 (三種方式)
-- 主鍵 (隱含 NOT NULL + UNIQUE)
CREATE TABLE tab_name (id INT NOT NULL PRIMARY KEY);
-- UNIQUE 約束
ALTER TABLE tab_name ADD CONSTRAINT uq_id UNIQUE (id);
-- 唯一索引
CREATE UNIQUE INDEX idx_name ON tab_name (id);
6. 檢查約束
ALTER TABLE books ADD booktype CHAR(1) CHECK (booktype IN ('F','N'));
7. 參照完整性 (外鍵)
CREATE TABLE authors (
authorid INTEGER NOT NULL PRIMARY KEY,
lname VARCHAR(100),
fname VARCHAR(100)
);
CREATE TABLE books (
bookid INTEGER NOT NULL PRIMARY KEY,
bookname VARCHAR(100),
isbn CHAR(10),
authorid INTEGER REFERENCES authors
);
實務建議
- 命名規範: pk_表名、fk_表名_參照表、uq_表名_欄位、ck_表名_規則
- 外鍵索引: 參照欄位**必建索引**,避免 RI 掃描全表鎖升級 (見隔離級別 RR 文章)
- DDL 變更窗口: 生產環境
ALTER TABLE 可能鎖表,安排維護窗口或用 ADMIN_MOVE_TABLE 線上遷移
- 版本控制: 所有 DDL 納入版控,採用遷移腳本管理