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

如何在MySQL中实施唯一约束?,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,我定义了一个MySQL表: 文件 -------------------------- ID int(11)PK 名称varchar(100) 客户ID int(11)FK iPrimaryImage tinyint(1) .... 我在这里读到,MySQL不支持带有WHERE条件的UNIQUE约束。对于每个customerId,我们只有一个primaryImage=1 那么,我还可以做些什么来实施这个约束呢?MySQL完全支持唯一的约束 但是,它不支持部分约束/索引,因此您需要使用NULL

我定义了一个MySQL表:

文件
--------------------------
ID int(11)PK
名称varchar(100)
客户ID int(11)FK
iPrimaryImage tinyint(1)
....

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


那么,我还可以做些什么来实施这个约束呢?

MySQL
完全支持唯一的约束

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

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

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

请参阅:即使MySQL支持唯一约束,您也不能在此处使用一个(假设每个客户有多个次映像),由于您将有几个元组具有相同的customerID和isPrimaryImage=0(但您可以使用NULL而不是0)。表设计已关闭,您无法使用这种布局强制执行所需内容。我同意Michael J.V的观点。我不想按您的方式执行此操作,而是放弃isPrimaryImage列并添加customerPrimaryImage表(具有CustomerID、ImageID和CustomerID上的唯一约束)。@quassnoi==casse noix??