Oracle還是比較常用的,於是我研究了一下Oracle Unique約束,在這裡拿出來和大家分享一下,希望對大家有用。如果某個約束只作用於單獨的字段,即可以在字段級定義約束,也可以在表級定義約束,但如果某個約束作用於多個字段,必須在表級定義約束
◆在定義約束時可以通過CONSTRAINT關鍵字為約束命名,如果沒有指定,Oracle將自動為約束建立默認的名稱定義primary key約束(單個字段)
- create table employees (empno number(5) primary key,...)
指定約束名
- create table employees (empno number(5) constraint emp_pk primary key,...)
定義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
- )
- )
Oracle自動會為具有PRIMARY KEY約束的字段(主碼字段)建立一個唯一索引和一個NOT NULL約束,定義PRIMARY KEY約束時可以為它的索引指定存儲位置和存儲參數
- alter table employees add primary key (empno)
- alter table employees add constraint emp_pk primary key (empno)
- alter table employees add constraint emp_pk primary key (empno,deptno)
- not null約束(只能在字段級定義NOT NULL約束,在同一個表中可以定義多個NOT NULL約束)
- alter table employees modify deptno not null/null
Unique約束
- create table employees
- ( empno number(5),
- ename varchar2(15),
- phone varchar2(15),
- email varchar2(30) unique,
- 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
定義了Oracle Unique約束的字段中不能包含重復值,可以為一個或多個字段定義Oracle Unique約束,因此,Unique即可以在字段級也可以在表級定義,在Oracle Unique約束的字段上可以包含空值.
foreign key約束
◆定義為FOREIGN KEY約束的字段中只能包含相應的其它表中的引用碼字段的值或者NULL值
◆可以為一個或者多個字段的組合定義FOREIGN KEY約束
◆定義了FOREIGN KEY約束的外部碼字段和相應的引用碼字段可以存在於同一個表中,這種情況稱為"自引用"
◆對同一個字段可以同時定義FOREIGN KEY約束和NOT NULL約束