亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Oracle 數(shù)據(jù)庫(kù)唯一約束中的NULL的處理

瀏覽:154日期:2023-11-25 10:29:32

根據(jù)NULL的定義,NULL表示的是未知,因此兩個(gè)NULL比較的結(jié)果既不相等,也不不等,結(jié)果仍然是未知。根據(jù)這個(gè)定義,多個(gè)NULL值的存在應(yīng)該不違反唯一約束。

實(shí)際上Oracle也是如此實(shí)現(xiàn)的:

SQL> CREATE TABLE T (ID NUMBER);

表已創(chuàng)建。

SQL> ALTER TABLE T ADD UNIQUE (ID);

表已更改。

SQL> INSERT INTO T VALUES (1);

已創(chuàng)建 1 行。

SQL> INSERT INTO T VALUES (1);

INSERT INTO T VALUES (1)

*第 1 行出現(xiàn)錯(cuò)誤:

ORA-00001: 違反唯一約束條件 (YANGTK.SYS_C007300)

SQL> INSERT INTO T VALUES (NULL);

已創(chuàng)建 1 行。

SQL> INSERT INTO T VALUES (NULL);

已創(chuàng)建 1 行。

SQL> INSERT INTO T VALUES (NULL);

已創(chuàng)建 1 行。

但是當(dāng)唯一約束為復(fù)合字段時(shí),則情況發(fā)生了變化。根據(jù)Oracle文檔的描述,對(duì)于復(fù)合字段的唯一約束,不為空字段的值是不能重復(fù)的。也就是說(shuō),如果兩個(gè)字段構(gòu)成了一個(gè)唯一約束,其中一個(gè)字段為空,那么另一個(gè)字段的值不能出現(xiàn)重復(fù)。

SQL> DROP TABLE T PURGE;

表已刪除。

SQL> CREATE TABLE T (ID NUMBER, ID2 NUMBER);

表已創(chuàng)建。

SQL> ALTER TABLE T ADD UNIQUE (ID, ID2);

表已更改。 

SQL> INSERT INTO T VALUES (1, 1);

已創(chuàng)建 1 行。

SQL> INSERT INTO T VALUES (1, NULL);

已創(chuàng)建 1 行。 

SQL> INSERT INTO T VALUES (2, NULL);

已創(chuàng)建 1 行。

SQL> INSERT INTO T VALUES (1, NULL);

INSERT INTO T VALUES (1, NULL)

*第 1 行出現(xiàn)錯(cuò)誤:

ORA-00001: 違反唯一約束條件 (YANGTK.SYS_C007301)

SQL> INSERT INTO T VALUES (NULL, NULL);

已創(chuàng)建 1 行。

SQL> INSERT INTO T VALUES (NULL, NULL);

已創(chuàng)建 1 行。

SQL> INSERT INTO T VALUES (NULL, NULL);

已創(chuàng)建 1 行。

對(duì)于全部為NULL的情況,仍然和單字段唯一約束一樣,不會(huì)造成重復(fù),但是對(duì)于部分為NULL的情況,就如上面例子所示,只要其中不為NULL的部分發(fā)生了重復(fù),Oracle就認(rèn)為約束發(fā)生了重復(fù)。

而這似乎和NULL的定義有所沖突,第一次看concept的時(shí)候一直沒有搞明白Oracle為什么這么實(shí)現(xiàn),不過(guò)這次再看concept的時(shí)候,已經(jīng)想明白了。

由于Oracle的唯一約束是依賴索引實(shí)現(xiàn)的,而Oracle的BTREE索引又是不存儲(chǔ)NULL值的,所以鍵值全部為NULL的記錄不會(huì)記錄在索引中,因此也就不會(huì)違反唯一約束了,而對(duì)于部分為NULL的記錄,索引是要記錄數(shù)值的,因此一旦鍵值中非NULL部分發(fā)生了沖突,Oracle就認(rèn)為違反了的唯一約束。

Oracle在這里還是選擇了自己的方便的方法來(lái)實(shí)現(xiàn),而沒有完全真正的根據(jù)NULL的定義去實(shí)現(xiàn)唯一約束。

主站蜘蛛池模板: 免费黄色看片 | 激情丝袜欧美专区在线观看 | 亚洲国产成人资源在线桃色 | 欧洲成人全免费视频网站 | 免费国产zzzwww色 | 国产a不卡片精品免费观看 国产a毛片高清视 | xxxxx18日本人hdxx| 精品在线免费视频 | 青青青草国产 | 日本黄区免费视频观看 | 中国一级毛片免费观看 | 色婷婷激婷婷深爱五月老司机 | 国产色视频一区 | 最新国产在线观看 | 国内免费视频成人精品 | 黄色影片在线观看 | 亚洲欧美综合日韩字幕v在线 | 69日本xxxxxxxx59| 香港毛片在线观看 | 欧美系列在线播放 | 国产高清第一页 | 成年女人免费视频播放77777 | 国内自拍视频在线观看 | 日产一区二区三区精品视频 | 亚洲精品久久一区影院 | 国产不卡一卡2卡三卡4卡5卡在线 | 毛片大全在线 | 久久黄色视屏 | 亚洲精品99久久一区二区三区 | 国产精品久久久久久久久免费 | 欧美黄色片在线播放 | 欧美日本一道高清二区三区 | 欧美三级在线看中文字幕 | 国产最新精品 | 亚洲精品一区二区三区在线看 | 香蕉视频免费在线 | 一级毛片免费播放视频 | 中文字幕无线码一区二区三区 | 国产视频国产 | 69国产成人精品午夜福中文 | 欧美亚洲在线视频 |