дублированное значение для составного первичного ключа - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть друг таблицы: enter image description here

, когда я хочу вставить две новые записи, такие как (1,2, true), (1,2, false), которые я получил дубликат du champ '1-2' его логика c, потому что, когда я вставляю еще две записи (1,2, true) (2,1, false), все идет хорошо. мой вопрос почему? Я думаю, что (1,2) (2,1) также дублируется для составного первичного ключа (request_to, request_from)

my sql запросов:

INSERT INTO `friends` (`request_to`, `request_from`, `confirmed`, `date_confirmation`) VALUES ('11', '12', b'1', NULL), ('12', '11', '', NULL)

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Мне кажется, что ПЕРВИЧНОГО ключа "request_to" достаточно, чтобы создать нарушение ограничения для дубликата (1).

1 голос
/ 14 апреля 2020

У вас есть первичный ключ на request_to и request_from.

Это означает, что вы не можете вставить повторяющиеся значения в этот столбец. В вашем примере, который не работает, (1, 2) дублируется. В вашем примере, который работает, (1, 2) <> (2, 1), так что все в порядке (для этого ограничения).

Если вы хотите уникальности независимо от направления, добавьте уникальное ограничение:

create unique index unq_friends_to_from on
    friends(least(request_to, request_from), greatest(request_to, request_from));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...