未强制执行唯一约束检查

Posted

技术标签:

【中文标题】未强制执行唯一约束检查【英文标题】:unique constraint check not enforced 【发布时间】:2010-12-21 06:09:00 【问题描述】:
create table A (id, field1, field2, field3, field4)

我有一个unique constraint on field1, field2, field3,表中存储了以下记录

例如

insert into A (1, "f1", null, "f3", "f4");
insert into A (2, "f1", null, "f3", "f4");
insert into A (3, "f1", null, "f3", "f4");

我希望这会引发唯一的约束违规,因为所有记录都违规,但事实并非如此。我在这里缺少什么,检查了数据库并创建了唯一约束索引。

【问题讨论】:

您可以为我们发一个show create table A 吗?您在那里使用的语句没有指明数据类型。 假设,它们都是字符串字段 【参考方案1】:

Null 值永远不会等于 any 其他值,即使 null 也是如此。 null != null

这就是为什么记录 a + null + b 永远不会重复记录 a + null + b

【讨论】:

我该如何避免强制执行此约束,假设 field2 仅在某些情况下包含值,而其余时间它将为空值。 有没有机会设置not null default '' @Jason:我不知道在 mysql 中有任何可能的方法。 @Jason: db4free.blogspot.com/2006/01/emulating-check-constraints.html 你可以试试这个。足够简单的解决方案。这是一个肮脏的黑客,但它有效;-) 我的应用程序需要在开发/测试模式下针对多个数据库运行,因此无法对数据库进行特定修改。它们必须符合 JPA 模型

以上是关于未强制执行唯一约束检查的主要内容,如果未能解决你的问题,请参考以下文章

Oracle复习约束以及视图

使用 SqlBulkCopy 时未(始终)强制执行约束

如何克服 Netezza 缺乏唯一约束/参照完整性执行的问题?

MySQL基础

SQL中Unique约束有啥用啊?

SQL中Unique约束有啥用啊?