首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 列修改與約束全攻略:長度、非空、默認值、序列、主鍵/唯一/檢查/外鍵

     編輯:DB2 教學

DB2 列屬性變更與約束建立的標準語法大全,涵蓋長度調整、非空切換、默認值設置、身份列/序列、四大約束類型 (主鍵、唯一、檢查、外鍵),附帶創建表時與事後 ALTER 兩種模式對比。

1. 修改列長度

ALTER TABLE tab_name ALTER COLUMN c1 SET DATA TYPE VARCHAR(20);

2. 設置/移除非空

-- 設置非空
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'
);

-- 事後添加 (DB2 9.7+)
ALTER TABLE tab_name ALTER COLUMN name SET DEFAULT 'none';

4. 身份列 / 序列 (自動遞增)

-- 身份列 (創建表時)
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;

5. 唯一性約束 (主鍵 / 唯一)

-- 主鍵 (創建表時)
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);

6. 檢查約束 (CHECK)

-- 創建表時
CREATE TABLE books (
    booktype CHAR(1) CHECK (booktype IN ('F','N'))
);

-- 事後添加
ALTER TABLE books ADD CONSTRAINT chk_booktype
CHECK (booktype IN ('F','N'));

7. 參照約束 (外鍵 FOREIGN KEY)

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 NULLSET NOT NULL / DROP NOT NULL
默認值WITH DEFAULTSET DEFAULT (9.7+)
身份列GENERATED AS IDENTITY不支援事後添加
主鍵PRIMARY KEYADD PRIMARY KEY
唯一UNIQUEADD CONSTRAINT UNIQUE
檢查CHECKADD CONSTRAINT CHECK
外鍵REFERENCESADD CONSTRAINT FOREIGN KEY

最佳實踐

  1. 優先在 CREATE TABLE 完整定義,DDL 可讀性強、鎖定時間短
  2. 身份列不可事後添加,規劃時務必確認
  3. 外鍵建議顯式命名 CONSTRAINT fk_xxx,便於管理
  4. 大表 ALTER 可能長時間鎖表,建議維護窗口執行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved