UNIQUE约束,仅当字段包含特定值时

Sam*_*Sam 14 mysql unique-constraint

我正在尝试为两列创建一个UNIQUE INDEX约束,但仅当另一列包含值1.例如,column_1并且column_2只有当时才应该是UNIQUE active = 1.包含任何行active = 0可以共享价值观column_1column_2与另一行,不管其它行的价值是什么active是.但行active = 1不能共享column_1column_2具有的另一行的值active = 1.

我所说的"共享"是两行在同一列中具有相同的值.示例:row1.a = row2.a AND row1.b = row2.b. 仅当row1中的两列与row2中的其他两列匹配时,才会共享值.

我希望我清楚自己.:\

Pau*_*sak 14

您可以尝试使用column_1,column_2和active创建多列UNIQUE索引,然后为不需要唯一性的行设置active = NULL.或者,你可以使用触发器(参见MySQL触发器语法) 并检查每个插入/更新的行,如果这些值已经在表中 - 但我认为它会相当慢.


Lew*_*sou 5

我正在尝试为两列创建一个 UNIQUE INDEX 约束,但仅当另一列包含值 1 时

您可以将“另一列”的值设置为不等于 1 的唯一值。例如记录的 id。

然后可以将唯一索引约束应用于包括“另一列”在内的所有三列。我们将“另一列”称为 columnX。如果要将唯一约束应用于记录,请将 columnX 的值设置为 1。如果您不想应用唯一约束,请将 columnX 的值设置为唯一值。

然后不需要额外的工作/触发器。所有三列的唯一索引可以解决您的问题。


Ian*_*ood -3

指数与外部影响无关。这种约束必须在数据库外部实现。