未强制执行唯一约束检查
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 模型以上是关于未强制执行唯一约束检查的主要内容,如果未能解决你的问题,请参考以下文章