如果不存在Mysql,则插入[重复]

Posted

技术标签:

【中文标题】如果不存在Mysql,则插入[重复]【英文标题】:INSERT if not Exist Mysql [duplicate] 【发布时间】:2013-12-22 13:23:36 【问题描述】:

我有这张桌子

id     follow_id    follower_id
 1  |       2     |      3
 2  |       2     |      4
 3  |       2     |      5
 4  |       2     |      6
 5  |       3     |      7
 6  |       3     |      8

如果我尝试插入“情侣”follow_id 2、follower_id 3 而不执行子查询,我想跳过

我可以在重复密钥更新或类似的情况下插入...吗?

更新,对于 symfony 用户

在回答之后。我使用 Symfony,并且为了做

UNIQUE INDEX followee_and_follower (follow_id,follower);

http://docs.doctrine-project.org/en/2.0.x/reference/annotations-reference.html#uniqueconstraint

【问题讨论】:

【参考方案1】:

我相信你想要的语法是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);

【讨论】:

我尝试 INSERT IGNORE INTO mytable (follow_id, follower_id) VALUES (2,3),但添加一行新 id 和 follow_id 2 follower_id 3 您需要一个关于 (follow_id,follower_id) 的唯一索引。请在上面查看我的更新答案。【参考方案2】:

这个的官方语法是

INSERT IGNORE ...

但是,在您的情况下,实际上可能更可取

INSERT ... ON DUPLICATE KEY UPDATE id=id

见benchmarks。根据我的经验,只有在你有主键的情况下,这种 hack 才能提高性能——如果你这样做 follower_id = follower_id,优化器将无法识别空操作。

【讨论】:

以上是关于如果不存在Mysql,则插入[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Mysql插入,如果不存在则插入另一个[重复]

如果不存在则插入记录的MySQL条件[重复]

MySQL:如果表中不存在则插入记录[重复]

MySQL INSERT插入条件判断:如果不存在则插入

如果存在则如何更新,否则在php mysql中插入[重复]

MySql -- 不存在则插入,存在则更新或忽略