如何在MySQL中强制实施唯一约束?

26

我有一个MySQL表定义:

File
--------------------------
ID int(11) PK
name varchar(100)
customerId int(11) FK
isPrimaryImage tinyint(1)
....


我在这里读到MySQL不支持带有WHERE条件的UNIQUE CONSTRAINT。 对于每个customerId,我们只有一个primaryImage = 1。

那么我还能做什么来强制执行这个约束呢?


请参见:https://dev59.com/R3E95IYBdhLWcg3wApBU - George Johnston
即使MySQL支持唯一约束,您也不能在此处使用它(假设每个客户有几个次要图像),因为您将有几个带有相同customerID和isPrimaryImage = 0的元组(但是对于这些您可以使用NULL替代0)。 - Frank Schmitt
表格设计不够好,像这样的布局无法实现你想要的效果。 - Michael J.V.
我同意Michael J.V.的观点 - 与其按照你的方式去做,不如摆脱isPrimaryImage列,改为添加一个customerPrimaryImage表(包含CustomerID、ImageID和CustomerID上的唯一约束)。 - Frank Schmitt
1个回答

55

MySQL完全支持唯一约束。

但是,它不支持部分约束/索引,因此您需要使用NULL而不是0来标记非主要图像。

ALTER TABLE file ADD CONSTRAINT ux_file_customer_primary 
UNIQUE (customerId, isPrimaryImage)

你可以在isPrimaryImage中插入任意数量的NULL值,但每个客户只能插入一个非空值。


@quassnoi == casse-noix ?? - Déjà vu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接