避免在mysql插入中重复

时间:2015-04-05 10:59:54

标签: mysql

我有一个朋友表,其中包含' id'朋友(INTEGER)'和'用户(INTEGER)'字段。

用户和朋友之间存在朋友关系。 即

id     user     friend

6       22        45

7       45        22

是相同的朋友关系,应该被视为重复记录。

我想一次输入大量记录,如下所示:

INSERT INTO friends (user, friend) VALUES(22, 34), (22, 76), (22, 567)...;

在这种情况下,我可以轻松地使用IGNORE来避免输入重复的(22,34)条目(如果(22,34)已经存在),但有没有办法我也可以避免输入(22,34) (34,22)已经存在,因为这是相同的关系。

1 个答案:

答案 0 :(得分:1)

对每对进行排序;然后执行INSERT IGNORE以避免错误消息。

您可以通过执行

进行排序
INSERT IGNORE INTO tbl (a,b) VALUES (LEAST($a, $b), GREATEST($a, $b));

但是,为了进行批量插入,您应该使用客户端语言进行排序。

另一个问题:INSERT IGNORE会在检查dup之前创建id。因此,许多AUTO_INCREMENT值将被“烧毁”。

我会说id似乎没有充分的理由,而不是解释如何避免燃烧。取而代之的是

PRIMARY KEY(user_id, friend_id)

排序的另一个问题...... SELECT可能需要执行UNION

( SELECT ... WHERE user_id = $x )
UNION ALL
( SELECT ... WHERE friend_id = $x )

这意味着你也需要这个:

INDEX(friend_id, user_id)