唯一性約束(Unique constraint)
唯一性約束可以保護(hù)表中多個數(shù)據(jù)列,保證在保護(hù)的數(shù)據(jù)列中任何兩行的數(shù)據(jù)都不相同。唯一性約束與表一起創(chuàng)建,在唯一性約束創(chuàng)建后,可以使用ALTER TABLE語句修改。
語法:
column_name data_type CONSTRAINT constraint_name UNIQUE
如果唯一性約束保護(hù)多個數(shù)據(jù)列,那么唯一性約束要作為表約束增加。語法如下:
CONSTRAINT constraint_name (column) UNIQUE USING INDEX TABLESPACE (tablespace_name) STORAGE (stored clause)
唯一性約束由一個B-tree索引增強(qiáng),所以可以在USING子串中為索引使用特殊特征,比如表空間或存儲參數(shù)。CREATE TABLE語句在創(chuàng)建唯一性約束的同時也給目標(biāo)數(shù)據(jù)列建立了一個唯一的索引。
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)。
刪除或禁用唯一性約束通常同時刪除相關(guān)聯(lián)的唯一索引,因而降低了數(shù)據(jù)庫性能。經(jīng)常刪除或禁用唯一性約束有可能導(dǎo)致丟失索引帶來的性能錯誤。要避免這樣錯誤,可以采取下面的步驟:
1、在唯一性約束保護(hù)的數(shù)據(jù)列上創(chuàng)建非唯一性索引。
2、添加唯一性約束
主鍵(Primary Key)約束
表有唯一的主鍵約束。表的主鍵可以保護(hù)一個或多個列,主鍵約束可與NOT NULL約束共同作用于每一數(shù)據(jù)列。NOT NULL約束和唯一性約束的組合將保證主鍵唯一地標(biāo)識每一行。像唯一性約束一樣,主鍵由B-tree索引增強(qiáng)。
創(chuàng)建主鍵約束使用CREATE TABLE語句與表一起創(chuàng)建,如果表已經(jīng)創(chuàng)建了,可以使用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
);
與唯一性約束一樣,如果主鍵約束保護(hù)多個數(shù)據(jù)列,那么必須作為一個表約束創(chuàng)建。
CREATE TABL
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。