最近項目中的需求,確定唯一一條數據,原來貌似碰到過,忘記了,現在記錄一下。實現唯一約束還可以不是主鍵的unique。
oracle中的unique約束是用來保證表中的某一類,或者表中的某一類組合起來不重復的一種手段。我們在可以在創建表時或者創建好后通過修改表的方式來創建oracle中的unique約束。
下面是一些創建unique約束的例子:
create table unique_test
(id number,
fname varchar2(20),
lname varchar2(20),
address varchar2(100),
email varchar2(40),
constraint name_unique unique(fname,lname))
在這里我們建立了一個表unique_test,并將其中的fname和lname組合起來建立了一個唯一約束。
我們也還可以在表創建完成后手動的通過修改表的方式來增加約束,例如:
alter table unique_test
add constraint email_unique unique(email);
下面我們來往表里面插入數據,
insert into unique_test(id,fname,lname) values(1,’德華’,'劉’)
這一行可以正常的被插入
因為我們在建立表時曾把fname和lname聯合起來作為一個約束,因為如果我們希望再次插入劉德華,
insert into unique_test(id,fname,lname) values(2,’德華’,'劉’)
是會出現如下錯誤的:
ORA-00001: 違反唯一約束條件 (SYS.NAME_UNIQUE)
但我們如果改為如下值:
insert into unique_test(id,fname,lname) values(2,’學友’,'張’);
又可以正常插入了。
有些朋友可能會有疑問,我們不是為email也建立的一個唯一約束嗎?為什么這兩行數據都沒有為email列賦值,也就是或兩行的email列都是空值,而插入也成功了呢?
這是因為一個空值(null)的含義是該列當前的狀態是不存在,他永遠不可能會與另外一個空值相等。所以也就不存在違反唯一約束之說了
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。