首页 > 解决方案 > 复合主键的重复值

问题描述

我有一个表友: 在此处输入图像描述

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

我的 sql 查询:

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

标签: mysqlsql

解决方案


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));

推荐阅读