在oracle中,可以使用“ALTER TABLE”語(yǔ)句和“DROP CONSTRAINT”關(guān)鍵字來(lái)刪除唯一約束,語(yǔ)法為“ALTER TABLE 數(shù)據(jù)表名 DROP CONSTRAINT 唯一約束名;”。
本教程操作環(huán)境:Windows7系統(tǒng)、Oracle 11g版、Dell G3電腦。
Oracle唯一約束
唯一約束是指所有記錄中字段的值不能重復(fù)出現(xiàn)。
一個(gè)唯一的約束是一個(gè)完整性約束,它確保存儲(chǔ)在一列或一組列中的數(shù)據(jù)在表中的行之間是唯一的。
通常,在使用內(nèi)聯(lián)約束語(yǔ)法創(chuàng)建表時(shí),將唯一約束應(yīng)用于列,如下所示:
CREATE?TABLE?table_name?( ????... ????column_name?data_type?UNIQUE ????... );
此唯一約束指定column_name中的值在整個(gè)表中是唯一的。
可以通過(guò)使用CONSTRAINT子句和約束名稱來(lái)指定一個(gè)唯一的約束名稱:
CREATE?TABLE?table_name?( ????... ????column_name?data_type?CONSTRAINT?unique_constraint_name?UNIQUE ????... );
而如果想要?jiǎng)h除一個(gè)唯一的約束:
ALTER?TABLE?數(shù)據(jù)表名 DROP?CONSTRAINT?唯一約束名;
示例:
創(chuàng)建一個(gè)名為clients的表:
CREATE?TABLE?clients?( ????client_id?NUMBER?GENERATED?BY?DEFAULT?AS?IDENTITY, ????first_name?VARCHAR2(50)?NOT?NULL, ????last_name?VARCHAR2(50)?NOT?NULL, ????company_name?VARCHAR2(255)?NOT?NULL, ????email?VARCHAR2(255)?NOT?NULL?UNIQUE, ????phone?VARCHAR(25) );
email列有一個(gè)唯一的約束,確保不會(huì)有重復(fù)的電子郵件。
以下語(yǔ)句在clients表中插入一行:
INSERT?INTO?clients(first_name,last_name,?email,?company_name,?phone) VALUES('Christene','Snider','we.chen@oraok.com',?'ABC?Inc',?'408-875-6075');
現(xiàn)在,我們嘗試在email列中插入一個(gè)電子郵件值已經(jīng)存在的新行:
INSERT?INTO?clients(first_name,last_name,?email,?company_name,?phone) VALUES('Sherly','Snider','we.chen@oraok.com',?'ABC?Inc',?'408-875-6076');
Oracle發(fā)出以下錯(cuò)誤消息,表示違反了唯一性約束:
SQL?Error:?ORA-00001:?unique?constraint?(OT.SYS_C0010726)?violated
如果要為兩列:company_name和phone添加唯一的約束,可以使用以下ALTER TABLE語(yǔ)句:
ALTER?TABLE?clients ADD?CONSTRAINT?unique_company_phone?UNIQUE(company_name,?phone);
結(jié)果,company_name和phone列中值的組合在clients表中的行中是唯一的。
要?jiǎng)h除唯一約束UNIQUE_COMPANY_PHONE,請(qǐng)使用以下語(yǔ)句:
ALTER?TABLE?clients DROP?CONSTRAINT?unique_company_phone;
推薦教程:《Oracle教程》