INSERT ... ON DUPLICATE KEY(什么都不做)

时间:2011-01-04 17:13:29

标签: mysql sql unique-key

我有一个表格,其中包含两列唯一键:

CREATE  TABLE `xpo`.`user_permanent_gift` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`fb_user_id` INT UNSIGNED NOT NULL ,
`gift_id` INT UNSIGNED NOT NULL ,
`purchase_timestamp` TIMESTAMP NULL DEFAULT now() ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `user_gift_UNIQUE` (`fb_user_id` ASC, `gift_id` ASC) );

我想在该表中插入一行,但如果该键存在,则什么都不做!我不希望生成错误,因为密钥存在。

我知道有以下语法:

INSERT ... ON DUPLICATE KEY UPDATE ...

但有类似的东西:

INSERT ... ON DUPLICATE KEY DO NOTHING 

3 个答案:

答案 0 :(得分:289)

是的,有INSERT IGNORE,或者您可以ON DUPLICATE KEY UPDATE id=id

答案 1 :(得分:1)

如何实施“如果不存在则插入”?

1. REPLACE INTO

如果条目匹配unique keyprimary key

,则删除然后插入新条目

优点:简单。

缺点: 1.太慢了。 2.自动增量键会增加。

2. INSERT IGNORE

优点:简单。

缺点: 1.自动增量键仍会增加。 2.其他一些错误将被忽略,例如数据转换错误。

3. INSERT ... ON DUPLICATE KEY UPDATE

优点:自动递增键将不增加

缺点:看起来相对复杂。

答案 2 :(得分:0)

使用ON DUPLICATE KEY UPDATE ...
否定:因为UPDATE使用资源进行第二次操作。

使用INSERT IGNORE ...
否定:如果出现问题,MySQL不会显示任何错误,因此您无法处理错误。仅在您不关心查询时才使用它。