唯一性約束(Unique constraint)
唯一性約束可以保護表中多個數(shù)據(jù)列,保證在保護的數(shù)據(jù)列中任何兩行的數(shù)據(jù)都不相同。唯一性約束與表一起創(chuàng)建,在唯一性約束創(chuàng)建后,可以使用ALTER TABLE語句修改。 語法: column_name data_type CONSTRAINT constraint_name UNIQUE 如果唯一性約束保護多個數(shù)據(jù)列,那么唯一性約束要作為表約束增加。語法如下: CONSTRAINT constraint_name (column) UNIQUE USING INDEX TABLESPACE (tablespace_name) STORAGE (stored clause) 唯一性約束由一個B-tree索引增強,所以可以在USING子串中為索引使用特殊特征,比如表空間或存儲參數(shù)。CREATE TABLE語句在創(chuàng)建唯一性約束的同時也給目標數(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)。 刪除或禁用唯一性約束通常同時刪除相關聯(lián)的唯一索引,因而降低了數(shù)據(jù)庫性能。經(jīng)常刪除或禁用唯一性約束有可能導致丟失索引帶來的性能錯誤。要避免這樣錯誤,可以采取下面的步驟: 1、在唯一性約束保護的數(shù)據(jù)列上創(chuàng)建非唯一性索引。 2、添加唯一性約束 主鍵(Primary Key)約束 表有唯一的主鍵約束。表的主鍵可以保護一個或多個列,主鍵約束可與NOT NULL約束共同作用于每一數(shù)據(jù)列。NOT NULL約束和唯一性約束的組合將保證主鍵唯一地標識每一行。像唯一性約束一樣,主鍵由B-tree索引增強。 創(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 ); 與唯一性約束一樣,如果主鍵約束保護多個數(shù)據(jù)列,那么必須作為一個表約束創(chuàng)建。 CREATE TABL |
|
來自: aaie_ > 《數(shù)據(jù)庫對像分析》