NULL和唯一約束UNIQUE的對應關系
在數據庫中,NULL表示列值為空。唯一約束UNIQUE規定指定列的值必須是唯一的,值和值之間都不能相同。這個時候,就出現一個問題,NULL和NULL算是相同,還是不同。由于SQL語法沒有明確規定,所以各個數據庫廠商的處理方式不同。
(1)PostgreSQL和Oracle認為NULL表示沒有指定數據,所以數據有多種可能,所以UNIQUE約束列中允許存在任意個NULL。
(2)Informix和SQL Server認為NULL就表示空,是一種唯一的狀態。所以UNIQUE約束列中只能有一個NULL。
(3)DB2、SQLAnyWhere和InterBase認為NULL存在不確定性,無法比較,所以UNIQUE約束列中不允許有NULL。
而SQLite遵循了PostgreSQL和Oracle的策略,允許UNIQUE約束列中有任意個NULL。