Условный составной ключ в MySQL?

Таким образом, у меня есть эта таблица с составным ключом, в основном 'идентификатор пользователя '-'data' должен быть уникальным (см. мою другую таблицу SQL вопроса - полууникальная строка?)

Однако я задавался вопросом, было ли возможно заставить это только войти в силу, когда идентификатор пользователя не является нулем? Этим я имею в виду, 'идентификатор пользователя '-'data' должен быть уникальным для ненулевых идентификаторов пользователей?

Или я рявкаю неправильное дерево?

Спасибо
Mala

7
задан Community 23 May 2017 в 12:07
поделиться

1 ответ

Ограничения SQL применяются к каждой строке в таблице. Вы не можете сделать их условными на основе определенных значений данных.

Однако, если вы можете использовать NULL вместо нуля, вы можете обойти уникальное ограничение. Уникальное ограничение позволяет нескольким записям, которые имеют NULL . Причина в том, что уникальность означает отсутствие двух равных ценностей . Средство равенства значение значение1 = значение2 должно быть правдой. Но в SQL, NULL = NULL неизвестен , не правда.

CREATE TABLE MyTable (id SERIAL PRIMARY KEY, userid INT, data VARCHAR(64));

INSERT INTO MyTable (userid, data) VALUES (   1, 'foo');
INSERT INTO MyTable (userid, data) VALUES (   1, 'bar');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');

До сих пор так хорошо, теперь вы можете подумать, что следующие утверждения будут нарушать уникальные ограничения, но они не:

INSERT INTO MyTable (userid, data) VALUES (   1, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'foo');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
5
ответ дан 7 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: