Oracle 數據庫唯一約束中的NULL的處理

發表于:2008-10-09來源:作者:點擊數: 標簽:數據庫oracleOracleORACLENULL
關鍵字: Oracle 約束中 NULL的處理 根據NULL的定義,NULL表示的是未知,因此兩個NULL比較的結果既不相等,也不不等,結果仍然是未知。根據這個定義,多個NULL值的存在應該不違反唯一約束。 實際上Oracle也是如此實現的: SQL CREATE TABLE T (ID NUMBER);
關鍵字:Oracle 約束中 NULL的處理

  根據NULL的定義,NULL表示的是未知,因此兩個NULL比較的結果既不相等,也不不等,結果仍然是未知。根據這個定義,多個NULL值的存在應該不違反唯一約束。

  實際上Oracle也是如此實現的:

  SQL> CREATE TABLE T (ID NUMBER);

  表已創建。

  SQL> ALTER TABLE T ADD UNIQUE (ID);

  表已更改。

  SQL> INSERT INTO T VALUES (1);

  已創建 1 行。

  SQL> INSERT INTO T VALUES (1);

  INSERT INTO T VALUES (1)

  *第 1 行出現錯誤:

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

  SQL> INSERT INTO T VALUES (NULL);

  已創建 1 行。

  SQL> INSERT INTO T VALUES (NULL);

  已創建 1 行。

  SQL> INSERT INTO T VALUES (NULL);

  已創建 1 行。

  但是當唯一約束為復合字段時,則情況發生了變化。根據Oracle文檔的描述,對于復合字段的唯一約束,不為空字段的值是不能重復的。也就是說,如果兩個字段構成了一個唯一約束,其中一個字段為空,那么另一個字段的值不能出現重復。

  SQL> DROP TABLE T PURGE;

  表已刪除。

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

  表已創建。

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

  表已更改。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97