CONSTRAINT на уникальные значения с условием
Есть таблица в mysql колонки (id,custom_field_id ,value)
В таблицу необходимо установить ограничение на уникальные значения поля value, при условии что custom_field_id = 7
т.е с при остальныхcustom_field_id значения могут быть не уникальными
Ответы (1 шт):
MySQL на данный момент не умеет частичные индексы.
В MySQL 8.0.13 и новее можно обойти так:
create table foo (custom_field_id int , value int);
create unique index idx1 on foo(value, (if(custom_field_id = 7, custom_field_id, null)));
Вычисляемое значение вторым полем будет давать NULL для custom_field_id != 7, NULL не равен NULL, а потому уникальность нарушаться не будет. Для значения 7, в свою очередь же, уникальность будет проверяться по значению value.
В ещё более старых версиях mysql придётся добавлять generated column в таблицу для вычисления выражения if(custom_field_id = 7, custom_field_id, null) и включать в индекс это поле.
create table foo (
custom_field_id int ,
val int,
cf7 int as (if(custom_field_id = 7, custom_field_id, null)) virtual
);
create unique index idx1 on foo(val, cf7);