有没有可能建立一个唯一的约束,仅当一个列不为空时才生效?
下面是一个示例表:
CREATE TABLE tbl(
col1 TEXT,
col2 TEXT,
col3 TEXT,
UNIQUE(col1, col2, col3)
);因此,如果col2为NULL,我希望将其视为[col1, anything, col3]
发布于 2015-03-21 03:47:55
正如SQLite documentation所解释的,这是该数据库和许多其他数据库的默认行为:
如果
UNIQUE关键字出现在CREATE和INDEX之间,则不允许重复的索引项。任何插入重复条目的尝试都将导致错误。出于唯一索引的目的,所有空值都被认为不同于所有其他空值,因此是唯一的。这是对SQL-92标准的两种可能的解释之一(该标准中的语言是模棱两可的),也是PostgreSQL、MySQL、Firebird和Oracle之后的解释。Informix和Microsoft SQL Server遵循该标准的另一种解释。
因此,您可以只创建您想要的索引。
发布于 2015-03-21 02:33:51
我不知道sqlite的答案。有几种DBMS产品恰好是默认的。如果定义了UNIQUE约束,它仍然允许一个或多个条目的一个或多个列为NULL。
我不确定,但我认为有一些DBMS产品走的是相反的方向。它们不允许包含空值的条目,除非可以用非空值证明唯一性。这个想法是,当存在空值时,is_unique的答案可能是未知的。
https://stackoverflow.com/questions/29171510
复制相似问题