我定义了一个MySQL表:

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


我在这里读到MySQL不支持带有WHERE条件的UNIQUE CONSTRAINT.每customerId个我们就只有1个primaryImage = 1.

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

推荐答案

MySQL完全支持唯一的约束.

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

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

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

Database相关问答推荐

在Prisma中建立关系

文件存储的推荐位置 - 在数据库或其他什么地方?

嵌入式的 best数据库是什么?

当我们需要触发程序的返回值时?

Postgresql:优化数字字段的列大小

JOIN 三张表

try 重新打开一个已经关闭的对象:SQLiteDatabase

在 postgresql 中将列从字符串更改为字符串数组

PHP + SQL Server - 如何设置连接字符集?

如何在大型数据库中使用 typeahead.js

如何在 MySQL 中强制执行唯一约束?

SQLite3 不支持外键约束吗?

执行语句还是运行脚本?

如何处理数据库中用户的身份验证/授权?

使用 C3P0 的 JDBC 连接池

如何在 SQL Server 中生成并手动插入唯一标识符?

复式记账的关系数据模型

如何解析来自 Google 快讯的数据?

获取 xp_cmdshell 的执行权限

列的 SQL Server 2008 千位分隔符