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

Oracle 索引與約束完整語法詳解

     編輯:Oracle 資料庫基礎

一、約束定義原則

  • 單欄位約束可在「欄位層級」或「表層級」定義;多欄位組合約束必須在表層級定義。
  • 可用 CONSTRAINT 關鍵字自訂約束名稱,否則 Oracle 自動產生預設名稱(如 SYS_C001234)。

二、Primary Key 約束

單欄位(欄位層級)

CREATE TABLE employees (
    empno NUMBER(5) PRIMARY KEY,
    ...
);

單欄位(指定約束名)

CREATE TABLE employees (
    empno NUMBER(5) CONSTRAINT emp_pk PRIMARY KEY,
    ...
);

多欄位組合鍵(表層級,含索引儲存參數)

CREATE TABLE employees (
    empno NUMBER(5),
    deptno NUMBER(3) NOT NULL,
    CONSTRAINT emp_pk PRIMARY KEY (empno, deptno)
    USING INDEX TABLESPACE indx
    STORAGE (INITIAL 64K NEXT 64K)
);

事後新增

ALTER TABLE employees ADD PRIMARY KEY (empno);
ALTER TABLE employees ADD CONSTRAINT emp_pk PRIMARY KEY (empno, deptno);

特性: Oracle 自動為 PK 建立唯一索引與 NOT NULL 約束;定義時可指定索引表空間與儲存參數。

三、NOT NULL 約束

僅能在欄位層級定義,單表可有多個。

ALTER TABLE employees MODIFY deptno NOT NULL;  -- 新增
ALTER TABLE employees MODIFY deptno NULL;      -- 移除

四、UNIQUE 約束

欄位層級

CREATE TABLE employees (
    email VARCHAR2(30) UNIQUE,
    ...
);

表層級(多欄位組合,含索引參數)

CREATE TABLE employees (
    empno NUMBER(5),
    ename VARCHAR2(15),
    phone VARCHAR2(15),
    deptno NUMBER(3) NOT NULL,
    CONSTRAINT emp_ename_phone_uk UNIQUE (ename, phone)
);

ALTER TABLE employees
ADD CONSTRAINT emp_uk UNIQUE (ename, phone)
USING INDEX TABLESPACE indx;

特性: 允許 NULL 值(單欄或多欄皆可),但非 NULL 值不得重複。

五、FOREIGN KEY 約束

  • 外鍵欄位值必須存在於父表參考欄位(PK 或 UK)中,或為 NULL。
  • 支援多欄位組合外鍵。
  • 支援自參考(父表與子表為同一表)。
  • 可同時定義 FK 與 NOT NULL。

標準語法

CREATE TABLE employees (
    ...
    deptno NUMBER(3) NOT NULL,
    CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)
    REFERENCES dept (deptno)
);

同名欄位簡寫

CREATE TABLE employees (
    ...
    deptno NUMBER(3) NOT NULL
    CONSTRAINT emp_deptno_fk REFERENCES dept
);

術語: 含外鍵的表為「子表」,被參考的表為「父表」;外鍵欄位稱「外部鍵」,被參考欄位稱「參考鍵」。

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