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

Oracle 約束建立六大方法完整總結:欄位級 vs 表級、命名規則與實務範例

     編輯:Oracle 資料庫基礎

六大約束類型概覽

約束類型支援層級可命名備註
NOT NULL僅欄位級不可
DEFAULT僅欄位級不可Oracle 不視為正式約束,USER_CONSTRAINTS 查不到
PRIMARY KEY欄位級/表級可
UNIQUE欄位級/表級可
CHECK欄位級/表級可
FOREIGN KEY欄位級/表級可跨表參考時必須用表級

四大核心原則

  1. NOT NULL、DEFAULT 僅能建立為欄位級約束
  2. 其餘四種可建立為欄位級或表級
  3. 涉及多欄位的約束(複合鍵)只能建立為表級
  4. 四種可命名約束(PK、UK、CK、FK)皆可指定名稱;NOT NULL、DEFAULT 不可命名

以 PRIMARY KEY 為例的六種建立方式

1. 建表時欄位級(無名稱)

CREATE TABLE t1 (tid NUMBER PRIMARY KEY);

2. 建表時欄位級(指定名稱)

CREATE TABLE t1 (tid NUMBER CONSTRAINT pk_tid PRIMARY KEY);

3. ALTER TABLE 修改欄位(欄位級,無名稱)

CREATE TABLE t2 (tid NUMBER);
ALTER TABLE t2 MODIFY tid PRIMARY KEY;
-- 或
ALTER TABLE t2 MODIFY tid NUMBER PRIMARY KEY;

4. 建表時表級(無名稱)

CREATE TABLE t3 (tid NUMBER, PRIMARY KEY (tid));

5. 建表時表級(指定名稱)

CREATE TABLE t3 (tid NUMBER, CONSTRAINT pk_t3id PRIMARY KEY (tid));

6. ALTER TABLE ADD 表級約束(可指定名稱)

CREATE TABLE t4 (tid NUMBER);
ALTER TABLE t4 ADD PRIMARY KEY (tid);
-- 或指定名稱
ALTER TABLE t4 ADD CONSTRAINT pk_t4id PRIMARY KEY (tid);

實務命名慣例建議

約束類型前綴範例
PRIMARY KEYPK_PK_EMP_EMPNO
FOREIGN KEYFK_FK_EMP_DEPTNO
UNIQUEUK_UK_EMP_EMAIL
CHECKCK_CK_EMP_SAL_MIN

命名優點:錯誤訊息可直接識別違反哪個約束,利於除錯與文件化。

常見陷阱提醒

  • DEFAULT 非真正約束:不會出現在 USER_CONSTRAINTS,僅存於 USER_TAB_COLUMNS.DATA_DEFAULT。
  • 啟用/停用約束:ALTER TABLE ... ENABLE/DISABLE CONSTRAINT ...,停用 FK 可大幅加快大量載入速度,載入後再啟用並驗證。
  • VALIDATE/NOVALIDATE:ENABLE NOVALIDATE 適合歷史資料不合規但新資料需合規的場景。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved