我有这张桌子
id follow_id follower_id
1 | 2 | 3
2 | 2 | 4
3 | 2 | 5
4 | 2 | 6
5 | 3 | 7
6 | 3 | 8
我想跳过如果我尝试插入“couple”follow_id 2,follower_id 3而不执行子查询的性能
我可以执行INSERT ... ON DUPLICATE KEY UPDATE或其他内容吗?
更新,适用于symfony用户
答案后。我使用Symfony,并做了
UNIQUE INDEX followee_and_follower (follow_id,follower);
http://docs.doctrine-project.org/en/2.0.x/reference/annotations-reference.html#uniqueconstraint
答案 0 :(得分:4)
我相信您想要的语法是INSERT IGNORE
。
来自the manual:
如果使用IGNORE关键字,则执行时会出现错误 INSERT语句被忽略。例如,没有IGNORE,就是一行 复制表中的现有UNIQUE索引或PRIMARY KEY值 导致重复键错误,语句被中止。同 IGNORE,仍然没有插入行,但没有发生错误。忽视 错误可能会产生警告,尽管重复键错误会产生警告 不
这需要一个唯一的索引(follow_id,follower_id),所以如果它不存在,你需要添加它:
ALTER TABLE mytable
ADD UNIQUE INDEX followee_and_follower (follow_id,follower);
答案 1 :(得分:4)
这方面的官方语法是
INSERT IGNORE ...
但是,在你的情况下,实际上可能更喜欢
INSERT ... ON DUPLICATE KEY UPDATE id=id
见benchmarks。根据我的经验,如果你有一个主键,这个hack只会提高性能 - 如果你follower_id = follower_id
,优化器将无法识别no-op。