【发布时间】:2017-07-12 03:02:13
【问题描述】:
我需要创建一个完整性约束,以确保在表的列中只有一个空值。经典的 UNIQUE 不好,因为它没有检测到多个空值...... 我该怎么办?
【问题讨论】:
-
是否有任何业务逻辑或接口阻止您使用唯一的“无数据”值而不是空值?
-
问题是它是考试练习的限制,所以我无法做出设计选择
标签: sql oracle constraints unique
我需要创建一个完整性约束,以确保在表的列中只有一个空值。经典的 UNIQUE 不好,因为它没有检测到多个空值...... 我该怎么办?
【问题讨论】:
标签: sql oracle constraints unique
CREATE TABLE qwe(
id int
);
CREATE UNIQUE INDEX qwe_idx ON qwe(
CASE WHEN id IS null THEN 'NULL' ELSE to_char(id) END
);
INSERT INTO qwe VALUES(1);
1 row inserted.
INSERT INTO qwe VALUES(1);
Error starting at line : 9 in command -
INSERT INTO qwe VALUES(1)
Error report -
ORA-00001: naruszono więzy unikatowe (TEST.QWE_IDX)
INSERT INTO qwe VALUES(NULL);
1 row inserted.
INSERT INTO qwe VALUES(NULL);
Error starting at line : 9 in command -
INSERT INTO qwe VALUES(NULL)
Error report -
ORA-00001: naruszono więzy unikatowe (TEST.QWE_IDX)
SELECT * FROM qwe;
ID
----------
1
(null)
【讨论】:
CREATE UNIQUE INDEX on table( CASE WHEN column IS NULL THEN 1 END )
when column is null then 1 ELSE COLUMN end。