是否可以创建一个仅在colum不为NULL时生效的唯一约束?
这是一个示例表:
CREATE TABLE tbl(
col1 TEXT,
col2 TEXT,
col3 TEXT,
UNIQUE(col1, col2, col3)
);
所以如果col2
为NULL,我希望它被视为[col1, anything, col3]
答案 0 :(得分:2)
正如SQLite documentation所解释的那样,这是该和许多其他数据库的默认行为:
如果在
UNIQUE
和CREATE
之间显示INDEX
关键字,则重复 不允许使用索引条目。任何插入重复条目的尝试 会导致错误。出于唯一索引的目的,所有NULL 值被认为与所有其他NULL值不同 因此独特。这是对此的两种可能解释之一 SQL-92标准(标准中的语言含糊不清)并且是 解释后跟PostgreSQL,MySQL,Firebird和Oracle。 Informix和Microsoft SQL Server遵循其他解释 标准。
因此,您可以根据需要创建索引。
答案 1 :(得分:0)
我不知道sqlite的答案。有几种DBMS产品,这正是默认产品。如果定义了UNIQUE约束,它仍然允许一个或多个具有一个或多个相关列的条目为NULL。
我不确定,但我认为有一些DBMS产品出现了相反的方式。它们不允许具有NULL值的条目,除非可以使用非null值证明唯一性。这个想法是,当存在NULLS时,is_unique的答案可能是未知的。