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

Oracle 資料完整性約束深度解析:唯一性、主鍵與外鍵

     編輯:Oracle 資料庫基礎

唯一性約束

確保受保護欄位組合在任兩列不相同。單欄可列層級定義;多欄須表層級定義。由 B-Tree 索引強制。

CREATE TABLE INSURED_AUTOS(
  POLICY_ID NUMBER CONSTRAINT PK_POLICIES PRIMARY KEY,
  VIN VARCHAR2(10),
  COVERAGE_BEGIN DATE,
  COVERAGE_TERM NUMBER,
  CONSTRAINT UNIQUE_AUTO UNIQUE (POLICY_ID, VIN)
    USING INDEX TABLESPACE IDX_TS STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0)
);

管理:

ALTER TABLE INSURED_AUTOS DISABLE CONSTRAINT UNIQUE_AUTO;
ALTER TABLE INSURED_AUTOS DROP CONSTRAINT UNIQUE_AUTO;

不可刪除被外鍵參考的唯一鍵,需先停用/刪除外鍵。

避免效能損失策略:

  1. 先於受保護欄位建非唯一索引
  2. 再加入唯一性約束

主鍵約束

表僅一主鍵,可跨多欄,隱含 NOT NULL + UNIQUE,同由 B-Tree 索引強制。

CREATE TABLE POLICIES(
  POLICY_ID NUMBER CONSTRAINT PK_POLICIES PRIMARY KEY,
  HOLDER_NAME VARCHAR2(40),
  GENDER VARCHAR2(1),
  MARITAL_STATUS VARCHAR2(1),
  DATE_OF_BIRTH DATE
);
-- 多欄主鍵
CONSTRAINT PK_NAME PRIMARY KEY (COL1, COL2)
  USING INDEX TABLESPACE IDX_TS STORAGE (...);

外鍵約束

建立父子表參考關係,確保子表外鍵值存在於父表主鍵/唯一鍵中。

-- 子表定義
CONSTRAINT FK_NAME FOREIGN KEY (COL) REFERENCES PARENT_TABLE(PK_COL)
  [ON DELETE CASCADE|SET NULL];

ON DELETE CASCADE:刪除父列連帶刪除子列
ON DELETE SET NULL:刪除父列將子列外鍵設為 NULL

Check 約束

單列布林條件,至少一欄為 NULL 即通過。可跨同列欄位,不可跨列、不可呼叫 SYSDATE/UID/USER/USERENV。不支援 LOB/物件/巢狀表/VARRAY/REF 型別。

CONSTRAINT CHK_GENDER CHECK (GENDER IN ('M','F'))
CONSTRAINT CHK_MARITAL CHECK (MARITAL_STATUS IN ('S','M','D','W'))

NOT NULL 約束

單欄強制非空。語法特殊:

ALTER TABLE POLICIES MODIFY HOLDER_NAME NOT NULL;

約束啟用/停用/刪除通用語法

ALTER TABLE T ENABLE CONSTRAINT CONS_NAME;
ALTER TABLE T DISABLE CONSTRAINT CONS_NAME;
ALTER TABLE T DROP CONSTRAINT CONS_NAME;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved