复合主键的重复值

时间:2020-04-14 17:46:34

标签: mysql sql

我有一个餐桌朋友: enter image description here

当我想插入两个新记录,例如(1,2,true),(1,2,false)时,我会重复du champ'1-2'的逻辑,因为当我插入另外两个记录(1, 2,true)(2,1,false)一切顺利。我的问题是为什么?我认为复合主键(request_to,request_from)的(1,2)(2,1)也被复制了

我的SQL查询:

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

2 个答案:

答案 0 :(得分:1)

您在request_torequest_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));

答案 1 :(得分:1)

在我看来,PRIMARY键“ request_to”足以对重复项(1)造成约束违规。