首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >唯一约束,但仅当不为空时

问唯一约束,但仅当不为空时
EN

Stack Overflow用户
提问于 2015-03-21 00:33:24
回答 2查看 1.3K关注 0票数 1

有没有可能建立一个唯一的约束,仅当一个列不为空时才生效?

下面是一个示例表:

代码语言:javascript
复制
CREATE TABLE tbl(
  col1 TEXT,
  col2 TEXT,
  col3 TEXT,
  UNIQUE(col1, col2, col3)
);

因此,如果col2为NULL,我希望将其视为[col1, anything, col3]

EN

回答 2

Stack Overflow用户

发布于 2015-03-21 03:47:55

正如SQLite documentation所解释的,这是该数据库和许多其他数据库的默认行为:

如果UNIQUE关键字出现在CREATE和INDEX之间,则不允许重复的索引项。任何插入重复条目的尝试都将导致错误。出于唯一索引的目的,所有空值都被认为不同于所有其他空值,因此是唯一的。这是对SQL-92标准的两种可能的解释之一(该标准中的语言是模棱两可的),也是PostgreSQL、MySQL、Firebird和Oracle之后的解释。Informix和Microsoft SQL Server遵循该标准的另一种解释。

因此,您可以只创建您想要的索引。

票数 2
EN

Stack Overflow用户

发布于 2015-03-21 02:33:51

我不知道sqlite的答案。有几种DBMS产品恰好是默认的。如果定义了UNIQUE约束,它仍然允许一个或多个条目的一个或多个列为NULL。

我不确定,但我认为有一些DBMS产品走的是相反的方向。它们不允许包含空值的条目,除非可以用非空值证明唯一性。这个想法是,当存在空值时,is_unique的答案可能是未知的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29171510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档