MySQL:如何确保多个字段的唯一约束与NULL值一起使用?

时间:2013-03-05 08:13:45

标签: mysql

这就像这个问题的第2部分:An issue while creating multiple unique columns with GORM

我在许多字段(description,is_active,deleted_at)上创建了一个带有唯一约束的表。它转向了它适用于这样的行:

id| description | is_active | deleted_at  
1 | desc1       | true      | 01/01/2000
2 | desc1       | true      | 01/01/2000

并且不能像这样工作:

id| description | is_active | deleted_at  
1 | desc1       | true      | NULL
2 | desc1       | true      | NULL

我也不希望复制具有NULL值的行。是否有解决方法?

1 个答案:

答案 0 :(得分:3)

  

13.1.14. CREATE TABLE Syntax

     

一个   UNIQUE索引创建一个约束,以便索引中的所有值   必须是截然不同的如果您尝试使用a添加新行,则会发生错误   与现有行匹配的键值。 对于所有引擎,一个独特的   index允许包含NULL的列的多个NULL值。

作为一种解决方法,您可以尝试使deleted_at列无法使用默认值0

deleted_at NOT NULL DEFAULT 0

围绕它构建您的查询和应用程序逻辑。

另一个选择是使用触发器强制执行此约束。