Как обеспечить уникальное ограничение в MySQL? - PullRequest
25 голосов
/ 13 июля 2011

У меня определена таблица MySQL:

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


Я читал здесь, что MySQL не поддерживает UNIQUE CONSTRAINT с условием WHERE. Для каждого customerId у нас будет только один primaryImage = 1 .

Так, что еще я могу сделать, чтобы усилить это ограничение?

1 Ответ

54 голосов
/ 13 июля 2011

MySQL прекрасно поддерживает уникальные ограничения.

Однако он не поддерживает частичные ограничения / индексы, поэтому вам нужно пометить неосновные изображения символом NULL вместо 0.

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

Вы можете вставить произвольное количество NULL значений в isPrimaryImage, но только одно ненулевое значение для каждого клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...