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

Oracle 主鍵與外鍵約束深度解析:功能差異、索引關聯與資料一致性保障

     編輯:Oracle 資料庫基礎

主鍵:實體完整性的基石

  • 唯一標識:每列組合值在表中唯一
  • 非空強制:隱含 NOT NULL 約束
  • 自動建立索引:Oracle 自動建立唯一索引支援快速查找
  • 加速查詢:等值/範圍查詢直接走索引,避免全表掃描

外鍵:參考完整性的守護者

  • 跨表關聯:引用父表主鍵或唯一鍵
  • 資料類型/長度必須完全一致:否則建立失敗
  • 修約束動作:
    • ON DELETE CASCADE:級聯刪除子表記錄
    • ON DELETE SET NULL:設為空值(子表欄位允許 NULL)
    • NO ACTION(預設):阻止父表刪除/更新若有子表引用
  • 維護一致性:防止孤兒記錄,確保父子表資料邏輯同步

建立語法對比

-- 主鍵
CREATE TABLE dept (
  deptno NUMBER(2) PRIMARY KEY,
  dname  VARCHAR2(14)
);

-- 外鍵(行級/表級均可)
CREATE TABLE emp (
  empno    NUMBER(4) PRIMARY KEY,
  ename    VARCHAR2(10),
  deptno   NUMBER(2),
  CONSTRAINT fk_emp_dept FOREIGN KEY (deptno) REFERENCES dept(deptno)
    ON DELETE SET NULL
);

效能與維護關鍵點

  1. 外鍵欄位**強烈建議手動建立索引**,避免父表刪除/更新時全表掃描子表鎖定
  2. 大量載入資料時可暫時 DISABLE 外鍵,載入完成後 ENABLE VALIDATE
  3. ENABLE NOVALIDATE:新資料受約束,舊資料不驗證(快速啟用)
  4. 查詢 USER_CONSTRAINTS、USER_CONS_COLUMNS 掌握約束關係圖

常見誤區

  • 以為外鍵自動建立索引 → **錯誤**,Oracle 不自動建立外鍵索引
  • 以為主鍵只能單欄 → **錯誤**,支援複合主鍵(最多 32 欄)
  • 刪除父表記錄報錯 → 檢查是否有子表引用、是否需級聯動作

主鍵定義「我是誰」,外鍵定義「我屬於誰」。兩者協同構建關聯式資料庫的骨架與紐帶,是資料品質與查詢效能的雙重保障。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved