美文网首页
insert If row dose not Exist(ups

insert If row dose not Exist(ups

作者: Gin_714d | 来源:发表于2019-04-17 14:12 被阅读0次
  • 使用 insert ignore
  • 使用 replace
  • 使用 insert … on duplicate key update

Using INSERT IGNORE

INSERT IGNORE mysql会忽略insert的执行的错误。一位着当UNIQUE index 或者 Primary key 重复时,mysql会忽略这个错误,并且忽略这个插入命令。适用于 执行大批量插入不确定是否存在于数据库的数据。这个命令不会造成id不连续。

> select max(id) from huge_coupon_product limit 1;
3203
> insert ignore into huge_coupon_product (item_id) values (18146518); # duplicate
No errors; 0 raws affected
> select max(id) from huge_coupon_product limit 1;
3203

总结:不会新增id,直接忽略整条命令

Using REPLACE

  • 找不到具有匹配值的现有数据行,因此执行标准INSERT语句。
  • 找到匹配的数据行,导致使用标准DELETE语句删除现有行,然后执行正常的INSERT。

这个命令感觉比较神奇哈,有两种可能的行为,不存在插入,存在删除已存在后再进行插入。

> select max(id) from huge_coupon_product limit 1;
3203
> replace into huge_coupon_product (item_id) values (18146518);
No errors; 2 raws affected
> select max(id) from huge_coupon_product limit 1;
3204

总结: 会增加id,会有两行被操作,先删除,后插入

Using INSERT ... ON DUPLICATE KEY UPDATE

不存在插入,存在更新

> select max(id) from huge_coupon_product limit 1;
3204
> insert into huge_coupon_product (item_id) values (18146518)  ON DUPLICATE KEY UPDATE item_id=111;
No errors; 2 raws affected
> select max(id) from huge_coupon_product limit 1;
3204

总结: 不会新增id,可以upsert。
新问题:
为啥affected两行呢?并且没有新增id的情况下? 考虑affected的判断条件。
keep moving

More information can be found in the official documentation.

相关文章

网友评论

      本文标题:insert If row dose not Exist(ups

      本文链接:https://www.haomeiwen.com/subject/uqqnwqtx.html