溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

數(shù)據(jù)庫(kù)中創(chuàng)建unique唯一約束

發(fā)布時(shí)間:2020-07-04 14:28:41 來(lái)源:網(wǎng)絡(luò) 閱讀:1034 作者:java程序猿 欄目:數(shù)據(jù)庫(kù)

   最近項(xiàng)目中的需求,確定唯一一條數(shù)據(jù),原來(lái)貌似碰到過(guò),忘記了,現(xiàn)在記錄一下。實(shí)現(xiàn)唯一約束還可以不是主鍵的unique。


   oracle中的unique約束是用來(lái)保證表中的某一類(lèi),或者表中的某一類(lèi)組合起來(lái)不重復(fù)的一種手段。我們?cè)诳梢栽趧?chuàng)建表時(shí)或者創(chuàng)建好后通過(guò)修改表的方式來(lái)創(chuàng)建oracle中的unique約束。

  下面是一些創(chuàng)建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))

  在這里我們建立了一個(gè)表unique_test,并將其中的fname和lname組合起來(lái)建立了一個(gè)唯一約束。

  我們也還可以在表創(chuàng)建完成后手動(dòng)的通過(guò)修改表的方式來(lái)增加約束,例如:

  alter table unique_test

  add constraint email_unique unique(email);

  下面我們來(lái)往表里面插入數(shù)據(jù),

  insert into unique_test(id,fname,lname) values(1,’德華’,'劉’)

  這一行可以正常的被插入

  因?yàn)槲覀冊(cè)诮⒈頃r(shí)曾把fname和lname聯(lián)合起來(lái)作為一個(gè)約束,因?yàn)槿绻覀兿M俅尾迦雱⒌氯A,

  insert into unique_test(id,fname,lname) values(2,’德華’,'劉’)

  是會(huì)出現(xiàn)如下錯(cuò)誤的:

  ORA-00001: 違反唯一約束條件 (SYS.NAME_UNIQUE)

  但我們?nèi)绻臑槿缦轮担?/p>

  insert into unique_test(id,fname,lname) values(2,’學(xué)友’,'張’);

  又可以正常插入了。

  有些朋友可能會(huì)有疑問(wèn),我們不是為email也建立的一個(gè)唯一約束嗎?為什么這兩行數(shù)據(jù)都沒(méi)有為email列賦值,也就是或兩行的email列都是空值,而插入也成功了呢?

  這是因?yàn)橐粋€(gè)空值(null)的含義是該列當(dāng)前的狀態(tài)是不存在,他永遠(yuǎn)不可能會(huì)與另外一個(gè)空值相等。所以也就不存在違反唯一約束之說(shuō)了


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI