资讯专栏INFORMATION COLUMN

180710-MySql插入唯一键冲突的三种可选方式

Cristalven / 2926人阅读

摘要:插入时唯一键冲突的几种处理方式插入一条记录,结果提示主键冲突,怎么办批量插入数据时,发现插入的这批数据中,有某些记录存在唯一键冲突,一个一个跳出来就比较麻烦了,有什么好的办法直接忽略掉冲突的记录么下面简单记录三种处理方式插入时唯一键

MySql插入时唯一键冲突的几种处理方式

MySql插入一条记录,结果提示主键冲突,怎么办?

批量插入数据时,发现插入的这批数据中,有某些记录存在唯一键冲突,一个一个跳出来就比较麻烦了,有什么好的办法直接忽略掉冲突的记录么?

下面简单记录三种处理方式

I. 插入时唯一键冲突问题 1. Ignore关键词

某些场景下,我们需要批量插入的数据,某些已经在DB中了,因此我希望在出现冲突时,直接跳过,把能插入的都插入就好,这种情况下,使用ignore关键词就比较合适了

一个实际的case如下

insert ignore into table (xxx, xxx) values (xxx,xxx), (xxx, xxx);

执行截图如下, 注意下面红框中的内容,表示忽略了两条,执行插入成功一条

2. Replace Into方式

如果在批量插入中,存在冲突时,我希望用我的新数据替换旧的数据,这个时候就可以使用replace into

常用姿势如下

replace into `user` (`id`, `name`, `create_at`, `update_at`) 
values
    (1, "test", "2018-07-10 18:54:00", "2018-07-10 19:54:52"),
    (2, "test2", "2018-07-10 18:54:00", "2018-07-10 19:54:52"),
    (3, "test3", "2018-07-10 18:54:00", "2018-07-10 19:54:52");

执行截图如下,注意红框中,当某条记录冲突之后并修改,则影响行数为2, 其实际过程是

删除冲突数据

插入新的数据

3. ON DUPLICATE KEY UPDATE

在出现冲突时,希望更新某些数据,这个时候就可以在insert语句的最后加上on duplicate key update

实例如下

insert into `user` (`id`, `name`, `create_at`, `update_at`) values (1, "test0", "2018-07-10 18:54:00", "2018-07-10 18:54:52") ON DUPLICATE KEY UPDATE `update_at`="2018-07-10 19:58:05";

执行截图如下,这个是在原记录的基础上执行更新指定的value, 比如上面的插入中,当冲突时,我们只更新update_at字段,而name的test0没有更新

II. 其他 1. 一灰灰Blog: https://liuyueyi.github.io/he...

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

微博地址: 小灰灰Blog

QQ: 一灰灰/3302797840

3. 扫描关注

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/47894.html

相关文章

  • Hibernate最全面试题

    摘要:中怎样实现类之间的关系如一对多多对多的关系中怎样实现类之间的关系如一对多多对多的关系它们通过配置文件中的来实现类之间的关联关系的。 Hibernate常见面试题 Hibernate工作原理及为什么要用? Hibernate工作原理及为什么要用? 读取并解析配置文件 读取并解析映射信息,创建SessionFactory 打开Sesssion 创建事务Transation 持久化操作 提...

    张利勇 评论0 收藏0
  • 这几道Java集合框架面试题在面试中几乎必问

    摘要:若遇到哈希冲突,则将冲突的值加到链表中即可。之后相比于之前的版本,之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值默认为时,将链表转化为红黑树,以减少搜索时间。有序,唯一红黑树自平衡的排序二叉树。 本文是最最最常见Java面试题总结系列第三周的文章。主要内容: Arraylist 与 LinkedList 异同 ArrayList 与 Vector 区别 HashMap的底层...

    bigdevil_s 评论0 收藏0
  • MySQL InnoDB锁机制全面解析分享

    摘要:一条记录操作完成,再读取下一条记录,直至没有满足条件的记录为止。 写在前面:在设计新零售供应链wms(仓库管理系统)库存模块时,为了防止并发情况对库存的影响,查阅了一些资料,对InnoDB锁机制有了更全面的了解,在此做出分享,如有疏漏望不吝指正,愿共同进步!(此篇为1.0版本,后续随理解深入,会逐步迭代完善~) 一、为什么要加锁 锁机制用于管理对共享资源的并发访问。 当多个用户并发地存...

    stormzhang 评论0 收藏0
  • Python数据结构——内建数据结构

    摘要:一列表是一个可以在其中存储一系列项目的数据结构。的项目之间需用逗号分开,并用一对中括号括将所有的项目括起来,以表明这是一个。序列不但支持负数下标还支持双下标,这对双下标表示一个区间。这种操作被称作切片操作。 一、列表(List) list 是一个可以在其中存储一系列项目的数据结构。list 的项目之间需用逗号分开,并用一对中括号括将所有的项目括起来,以表明这是一个 list 。下例用以...

    Dr_Noooo 评论0 收藏0
  • TiDB 源码阅读系列文章(十六)INSERT 语句详解

    摘要:在之前的一篇文章源码阅读系列文章四语句概览中,我们已经介绍了语句的大体流程。语句自身都可以连接一个语句作为待插入数据的输入,因此,其又受到了来自的影响关于的部分详见相关的源码阅读文章七基于规则的优化和八基于代价的优化。 在之前的一篇文章 《TiDB 源码阅读系列文章(四)INSERT 语句概览》 中,我们已经介绍了 INSERT 语句的大体流程。为什么需要为 INSERT 单独再写一篇...

    elliott_hu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<