DB2 列屬性變更與約束建立的標準語法大全,涵蓋長度調整、非空切換、默認值設置、身份列/序列、四大約束類型 (主鍵、唯一、檢查、外鍵),附帶創建表時與事後 ALTER 兩種模式對比。
ALTER TABLE tab_name ALTER COLUMN c1 SET DATA TYPE VARCHAR(20);
-- 設置非空
ALTER TABLE tab_name ALTER COLUMN c1 SET NOT NULL;
-- 創建表時指定
CREATE TABLE tab_name (id INTEGER NOT NULL);
-- 創建表時
CREATE TABLE tab_name (
id INTEGER,
name VARCHAR(10) WITH DEFAULT 'none'
);
-- 事後添加 (DB2 9.7+)
ALTER TABLE tab_name ALTER COLUMN name SET DEFAULT 'none';
-- 身份列 (創建表時)
CREATE TABLE tab_name (
id INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)
);
-- 序列對象 (獨立、可跨表共享)
CREATE SEQUENCE seq_name
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO CYCLE
CACHE 20;
-- 主鍵 (創建表時)
CREATE TABLE tab_name (id INT NOT NULL PRIMARY KEY);
-- 唯一約束 (ALTER)
ALTER TABLE tab_name ADD CONSTRAINT unq_id UNIQUE (id);
-- 唯一索引 (等效)
CREATE UNIQUE INDEX idx_name ON tab_name (id);
-- 創建表時
CREATE TABLE books (
booktype CHAR(1) CHECK (booktype IN ('F','N'))
);
-- 事後添加
ALTER TABLE books ADD CONSTRAINT chk_booktype
CHECK (booktype IN ('F','N'));
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(authorid)
);
-- 或事後添加
ALTER TABLE books ADD CONSTRAINT fk_author
FOREIGN KEY (authorid) REFERENCES authors(authorid);
| 操作 | 創建表時 (推薦) | ALTER TABLE (事後) |
|---|---|---|
| 長度 | 定義時指定 | SET DATA TYPE |
| 非空 | NOT NULL | SET NOT NULL / DROP NOT NULL |
| 默認值 | WITH DEFAULT | SET DEFAULT (9.7+) |
| 身份列 | GENERATED AS IDENTITY | 不支援事後添加 |
| 主鍵 | PRIMARY KEY | ADD PRIMARY KEY |
| 唯一 | UNIQUE | ADD CONSTRAINT UNIQUE |
| 檢查 | CHECK | ADD CONSTRAINT CHECK |
| 外鍵 | REFERENCES | ADD CONSTRAINT FOREIGN KEY |
CREATE TABLE 完整定義,DDL 可讀性強、鎖定時間短CONSTRAINT fk_xxx,便於管理