我有一个表格,其中包含两列唯一键:
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
答案 0 :(得分:289)
是的,有INSERT IGNORE
,或者您可以ON DUPLICATE KEY UPDATE id=id
。
答案 1 :(得分:1)
REPLACE INTO
如果条目匹配unique key
或primary key
优点:简单。
缺点: 1.太慢了。 2.自动增量键会增加。
2.INSERT IGNORE
优点:简单。
缺点: 1.自动增量键仍会增加。 2.其他一些错误将被忽略,例如数据转换错误。
3.INSERT ... ON DUPLICATE KEY UPDATE
优点:自动递增键将不增加。
缺点:看起来相对复杂。
答案 2 :(得分:0)
使用ON DUPLICATE KEY UPDATE ...
,
否定:因为UPDATE
使用资源进行第二次操作。
使用INSERT IGNORE ...
,
否定:如果出现问题,MySQL不会显示任何错误,因此您无法处理错误。仅在您不关心查询时才使用它。