唯一性約束(Unique constraint)
唯一性約束可以保護表中多個數據列,保證在保護的數據列中任何兩行的數據都不相同。唯一性約束與表一起創建,在唯一性約束創建後,可以使用ALTER TABLE語句修改。
語法:
column_name data_type CONSTRAINT constraint_name UNIQUE
如果唯一性約束保護多個數據列,那麼唯一性約束要作為表約束增加。語法如下:
CONSTRAINT constraint_name (column) UNIQUE USING INDEX TABLESPACE (tablespace_name) STORAGE (stored clause)
唯一性約束由一個B-tree索引增強,所以可以在USING子串中為索引使用特殊特征,比如表空間或存儲參數。CREATE TABLE語句在創建唯一性約束的同時也給目標數據列建立了一個唯一的索引。
CREATE TABLE insured_autos
(policy_id NUMBER CONSTRAINT pk_policIEs PRIMARY KEY,
vin VARCHAR2(10),
coverage_begin DATE,
coverage_term NUMBER,
CONSTRAIN unique_auto UNIQUE (policy_id,vin) USING INDEX TABLESPACE index STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0)
);
用戶可以禁用未以性約束,但他仍然存在,禁用唯一性約束使用ALTER TABLE 語句
ALTER TABLE insured_autos DISABLE CONSTRAIN unique_name;
刪除唯一性約束,使用ALTER TABLE....DROP CONSTRAIN語句
ALTER TABLE insured_autos DROP CONSTRAIN unique_name;
注意用戶不能刪除在有外部鍵指向的表的唯一性約束。這種情況下用戶必須首先禁用或刪除外部鍵(foreign key)。
刪除或禁用唯一性約束通常同時刪除相關聯的唯一索引,因而降低了數據庫性能。經常刪除或禁用唯一性約束有可能導致丟失索引帶來的性能錯誤。要避免這樣錯誤,可以采取下面的步驟:
1、在唯一性約束保護的數據列上創建非唯一性索引。
2、添加唯一性約束
主鍵(Primary Key)約束 表有唯一的主鍵約束。表的主鍵可以保護一個或多個列,主鍵約束可與NOT NULL約束共同作用於每一數據列。NOT NULL約束和唯一性約束的組合將保證主鍵唯一地標識每一行。像唯一性約束一樣,主鍵由B-tree索引增強。
創建主鍵約束使用CREATE TABLE語句與表一起創建,如果表已經創建了,可以使用ALTER TABLE語句。
CREATE TABLE policIEs
(policy_id NUMBER CONSTRAINT pk_policIEs PRIMARY KEY,
holder_name VARCHAR2(40),
gender VARCHAR2(1),
marital_status VARCHAR2(1),
date_of_birth DATE
);
與唯一性約束一樣,如果主鍵約束保護多個數據列,那麼必須作為一個表約束創建。
CREATE TABL