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

Oracle 9i 添加外鍵約束完整語法與級聯操作指南

     編輯:Oracle 資料庫基礎

基本語法

在 Oracle 中為現有表添加外鍵約束,使用 ALTER TABLE ... ADD CONSTRAINT 語句。外鍵確保引用完整性,防止孤兒記錄產生。

1. 標準添加外鍵

-- 先確保父表主鍵存在
CREATE TABLE major (
    major_id NUMBER(9) PRIMARY KEY,
    major_name VARCHAR2(50)
);

-- 子表創建
CREATE TABLE stu_maj_cour (
    number_id NUMBER(9) PRIMARY KEY,
    major_id NUMBER(9)  -- 外鍵列
);

-- 添加外鍵約束(建議顯式命名約束)
ALTER TABLE stu_maj_cour
ADD CONSTRAINT fk_stu_maj_cour_major
FOREIGN KEY (major_id)
REFERENCES major (major_id);

2. 支持級聯刪除/更新

ALTER TABLE stu_maj_cour
ADD CONSTRAINT fk_stu_maj_cour_major
FOREIGN KEY (major_id)
REFERENCES major (major_id)
ON DELETE CASCADE;  -- 刪除父記錄時自動刪除子記錄

注意:Oracle 不支持 ON UPDATE CASCADE。主鍵值變更需應用層手動處理或使用觸發器實現級聯更新。

常見約束選項對照表

子句行為適用場景
無(默認)父記錄被引用時禁止刪除/更新嚴格業務完整性,如訂單-客戶
ON DELETE CASCADE自動刪除子記錄明確從屬關係,如訂單明細-訂單主檔
ON DELETE SET NULL子記錄外鍵列置 NULL子記錄可獨立存在,如員工-部門(員工可無部門)

驗證與查看

-- 查看表的所有約束
SELECT constraint_name, constraint_type, table_name, r_constraint_name
FROM user_constraints
WHERE table_name = 'STU_MAJ_COUR';

-- 查看外鍵具體列映射
SELECT c.constraint_name, cc.column_name, c.r_constraint_name
FROM user_constraints c
JOIN user_cons_columns cc ON c.constraint_name = cc.constraint_name
WHERE c.constraint_type = 'R' AND c.table_name = 'STU_MAJ_COUR';

最佳實踐提醒

  • 必須建立索引:外鍵列上應創建索引,避免父表 DML 時全表掃描子表鎖定(Oracle 11g+ 自動創建,舊版本需手動)。
  • 約束命名規範:採用 fk_子表_父表 格式,便於數據字典檢索。
  • 啟用/禁用:大量導入數據時可 DISABLE 約束,導入後 ENABLE VALIDATE 重新驗證。

正確使用外鍵約束,是關系型數據庫維護數據質量的基石。

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