CONSTRAINT 關鍵字自訂約束名稱,否則 Oracle 自動產生預設名稱(如 SYS_C001234)。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 約束;定義時可指定索引表空間與儲存參數。
僅能在欄位層級定義,單表可有多個。
ALTER TABLE employees MODIFY deptno NOT NULL; -- 新增
ALTER TABLE employees MODIFY deptno NULL; -- 移除
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 值不得重複。
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
);
術語: 含外鍵的表為「子表」,被參考的表為「父表」;外鍵欄位稱「外部鍵」,被參考欄位稱「參考鍵」。