首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 資料物件分析 (中):五大完整性約束建立、啟用、停用、刪除

     編輯:Oracle 資料庫相關知識

五大約束類型

約束用途典型場景
CHECK自訂布林條件性別只能 M/F、狀態碼範圍
NOT NULL欄位必填主鍵欄、業務關鍵欄
UNIQUE值唯一 (可多 NULL)候選鍵、Email、身分證號
PRIMARY KEYNOT NULL + UNIQUE表主鍵
FOREIGN KEY參考完整性明細表關聯主表主鍵

約束存放於資料字典,不佔資料空間;可 ENABLE/DISABLE 切換,DROP 移除。

CHECK 約束

  • 條件只能參考同列其他欄位,不可跨列、跨表、調用 SYSDATE/UID/USER/USERENV。
  • 單欄可多 CHECK,單 CHECK 可護多欄 (表級約束)。
  • 語法:CONSTRAINT chk_name CHECK (condition)。
CREATE TABLE policies (
  policy_id NUMBER,
  gender VARCHAR2(1) CONSTRAINT chk_gender CHECK (gender IN ('M','F')),
  marital_status VARCHAR2(1),
  CONSTRAINT chk_marital CHECK (marital_status IN ('S','M','D','W'))
);

NOT NULL 約束

  • 僅適用單欄,預設 Oracle 允許 NULL,加上此約束強制必填。
  • 建表時:col_name datatype NOT NULL。
  • 事後新增:ALTER TABLE policies MODIFY holder_name NOT NULL; (語法特殊,非 ADD CONSTRAINT)。

UNIQUE / PRIMARY KEY / FOREIGN KEY

  • 建表時可為欄位級或表級;PRIMARY KEY 隱含 NOT NULL + UNIQUE 並自動建立索引。
  • FOREIGN KEY 語法:CONSTRAINT fk_name FOREIGN KEY (col) REFERENCES parent_table(parent_col) [ON DELETE CASCADE|SET NULL]。

約束管理命令

-- 停用
ALTER TABLE policies DISABLE CONSTRAINT chk_gender;
-- 啟用 (驗證現有資料)
ALTER TABLE policies ENABLE CONSTRAINT chk_gender;
-- 啟用不驗證 (大量載入後)
ALTER TABLE policies ENABLE NOVALIDATE CONSTRAINT chk_gender;
-- 刪除
ALTER TABLE policies DROP CONSTRAINT chk_gender;

命名規範建議

  • PK_表名、FK_子表_父表、UK_表名_欄名、CHK_表名_業務意義、NN_表名_欄名。
  • 未命名時 Oracle 自動產生 SYS_Cxxxxxx,難以辨識。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved