首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL 插入数据时如何不插入重复的数据

业务场景 针对一些基础业务数据如用户表,要保证主键Primary或Unique不重复,如果在插入时做判断,效率低且代码复杂。 2....实现方案 基于MySQL数据库,实现方案有如下4种 replace into 使用最简单,推荐 on duplicate key update 可以根据业务需要,当数据重复时,指定更新的内容。...否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。...2.2. on duplicate key update 先执行insert语句,当出现primary或者unique冲突时执行update语句,update语句则是需要更新的内容:使用新值替换数据库中的值...否则的话会直接插入数据,这将导致表中出现重复的数据。 2.3. insert ignore into 当执行insert to出现冲突时不返回错误,只以警告形式返回。

7.4K51

IGNORE,REPLACE,ON DUPLICATE KEY UPDATE在避免重复插入记录时存在的问题及最佳实践

参考博客1中介绍了三种在MySQL中避免重复插入记录的方法,本文将在简单介绍这三种用法的基础上,深入分析这其各自存在的问题,最后给出在实际生产环境中对该业务场景的最佳实践。...由此可知,在实际生产环境中,几乎不太有使用该关键字的场景,因为业务上是需要当出现唯一键冲突时更新某些字段的,而不是直接忽略。...; 当因为对于主键或唯一关键字出现重复关键字错误而造成插入失败时,从表中删除含有重复关键字值的(所有)冲突行 ; 再次尝试把新行插入到表中 。...受影响的行数可以容易地确定是否REPLACE只添加了一行,或者是否REPLACE也替换了其它行:检查该数是否为1(添加)或更大(替换)。...,会埋下一颗定时炸弹,在某些情况下,如DDL,重启等之后,业务开始报错,会误认为DDL或者重启导致业务表的插入故障。

2.3K23
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    经验:在MySQL数据库中,这4种方式可以避免重复的插入数据!

    作者:小小猿爱嘻嘻 wukong.com/question/6749061190594330891/ 最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦...02 on duplicate key update 即插入数据时,如果数据存在,则执行更新操作,前提条件同上,也是插入的数据字段设置了主键或唯一索引,测试SQL语句如下,当插入本条记录时,MySQL数据库会首先检索已有数据...03 replace into 即插入数据时,如果数据存在,则删除再插入,前提条件同上,插入的数据字段需要设置主键或唯一索引,测试SQL语句如下,当插入本条记录时,MySQL数据库会首先检索已有数据(idx_username...,这种方式适合于插入的数据字段没有设置主键或唯一索引,当插入一条数据时,首先判断MySQL数据库中是否存在这条数据,如果不存在,则正常插入,如果存在,则忽略: ?...目前,就分享这4种MySQL处理重复数据的方式吧,前3种方式适合字段设置了主键或唯一索引,最后一种方式则没有此限制,只要你熟悉一下使用过程,很快就能掌握的,网上也有相关资料和教程,介绍的非常详细,感兴趣的话

    4.5K40

    mysql 是如何保证在高并发的情况下autoincrement关键字修饰的列不会出现重复

    实现这个机制的背后,主要有两种方式 采用 AUTO-INC 锁,也就是在执行插入语句时,就在表级别上加一个AUTO-INC锁。...需要注意的是,在释放锁的时候,不同于一般情况下的读锁和写锁,是在事务执行完成之后自动释放锁。AUTO-INC锁是在当前语句插入完成之后释放的。...采用一个轻量级的锁,在为插入语句生成AUTO_INCREMENT修饰的列分配递增的值时获取该锁,在数值分配完成后就释放该锁。所以采用这种方式的话,必须清楚该插入语句具体的插入数量。...锁方式; 若值为1,轻量级锁方式; 若值为2,两种方式混着来(就是插入记录数量确定的情况下使用轻量级锁,不确定时采用AUTO-INC锁方式)。...tips: 采用轻量级锁时,可能会造成不同事务中,插入语句生成的数值是交叉的。

    96910

    MySQL枚举类型enum字段在插入不在指定范围的值时, 是否是”插入了enum的第一个值”?…「建议收藏」

    刚刚在看MySQL>>一书的”ENUM类型”一节, 以下面的代码举例, 得出结论: “还可以看出对于不在ENUM指定范围内的值时, 并没有返回警告, 而是插入了enum(‘M’, ‘F’)的第一个值...’M’“ 但是当我插入另外一种值’S’时, 却提示我”Data truncated for enumColumn at row 1″ 我想问这个结论是否正确?...这个相当于是一个警告信息,在我本地测试的 5.7 中,直接插入会报错,但是使用 ignore 后,数据能被强制插入,但是是空值。...INSERT ignore INTO user (sex) VALUES (5); 在服务器使用 MySQL 5.5 测试 无论是否添加 ignore 数据都能被插入,但是是空值。...在 MySQL 枚举类型的“八宗罪” 这篇文章的第七条,文中提到了,如果不合法会被处理成空字符串,在后一段中又提到了因为类型的缘故,会根据枚举索引去取值。

    1.8K20

    本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止

    这几天因为工作需求,需要把MySQL请出来,所以将尘封已久的MySQL进行启动。可是事与愿违,兴许是许久没有访问MySQL了,MySQL生气的不理我,并向外抛出一阵阵报错。...某些服务在未由其他服务或程序使用时将自动停止,报错如下图所示。 ? 3、之后即便我垂死挣扎,在命令行窗口中不断的重启MySQL服务,但是仍然没有戳到痛点,尝试的步骤有下图为证。 ?...4、随后想当然的硬上进入MySQL,根本就不可能,只能撞南墙,败兴而归。 ? 5、后来也想过直接通过点击“我的电脑>管理>服务>MySQL”,收到启动MySQL,但是丝毫没有改观。 ?...无奈之下,不断的寻找blog,终于找到了一个可行的方法,但是代价也是很大的,基本上是给MySQL洗心革面了。...而且在状态栏的MySQL Notifier中也会弹出提示,如下图所示,MySQL的状态变为从停止变为启动。 ?

    63.4K2616

    【错误解决】本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止

    转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自【大学之旅_谙忆的博客】 欢迎点击访问我的瞎几把整站点:复制未来 在启动mysql服务时出现该错误:...本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止。...mysql 版本 5.7.14 系统 win 7 后来经过一系列的百度,谷歌,总算是解决了。 首先,你需要把原来的服务删除: mysqld --remove mysql ?...注意:mysql为你的服务名称,自己可以随便定义的。 此命令需要进入mysql安装目录下的bin目录运行! mysql的根目录下: 你需要清空data目录。...然后在bin目录

    2.9K41

    MySQL 的可重复读

    SQL 1992 年标准关于幻读 (Phantom) 的解释: “一个事务 T1 根据某些查询条件 读取某几行数据,然后事务 T2 执行 SQL 语句插入一行或多行满足查询条件...幻读比起不可重复读更加侧重强调两次查询得到的行数不一样(多了或少了),或者行数一样但不是同一批(被替换了)。...但是,MySQL 的可重复读比 SQL 的可重复读的标准要更高,具体表现为:仅仅用 select 语句时幻读不会发生(这种情况简称 Phantom Reads),但是出现与写有关的操作时幻读会发生(这种情况简称...所以这就解释了某些文章会说 MySQL 的可重复读可以防止某些幻读情况的出现。...另外,从面试的角度来说,如果没有强调是 MySQL 的情况,可以忽略这些,只要按照 SQL 的关于幻读和可重复读的定义来回答即可。

    1.8K21

    Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day17】—— 数据库4

    车票 面试题1:MySQL中你用过的INSERT插入方式都有哪几种? 1、普通插入语句 2、插入或更新 3、插入或替换 4、插入或忽略 面试题2:见过大量数据同时插入的场景么?有哪些处理方式?...我们常见的插入方法一般有这几种,普通插入语句、插入或更新、插入或替换、插入或忽略,应用在不同的场景中,在功能方面呢也会有所不同。...上面REPLACE影响了多行记录,这是因为在表中有超过一个的唯一索引。在这种情况下,REPLACE将考虑每一个唯一索引,并对每一个索引对应的重复记录都删除,然后插入这条新记录。...我们可以看到,在用REPLACE INTO时每个唯一索引都会有影响的,可能会造成误删数据的情况,因此建议不要在多唯一索引的表中使用REPLACE INTO; 4、插入或忽略   如果我们希望插入一条新记录...\n、\r等下流的数据,导致查询时返回了空字符串’’,正则校验时又出现空指针; 用户名设置为’null’   在 MySQL 中,NULL 表示未知的数据,我们在设计表时,常常有老司机告诉我们: 字段尽可能用

    1.2K20

    MariaDB 管理重复表数据

    在某些情况下,重复确实会导致问题,并且它们常常由于隐式动作或MariaDB命令的宽松策略而出现。 有多种方法可以控制此问题,查找重复项,删除重复项,并防止重复创建。...ON DUPLICATE KEY UPDATE发现重复的唯一或主键时,它执行更新。 发现多个唯一键时,它只更新第一个。 因此,不要在具有多个唯一索引的表上使用它。...查看以下示例,该示例显示在插入到填充字段时在包含索引值的表中发生的情况 - INSERT INTO add_dupl VALUES (1,'Apple'); ERROR 1062 (23000): Duplicate...当使用多个表达式时,它返回唯一的组合。 它不会忽略NULL值; 因此,结果还包含NULL作为唯一值。...某些表基于表数据的性质需要重复。 满足您在管理重复记录的策略中的需要。

    1.3K10

    MySQL实战中,Insert语句的使用心得总结

    1-3.插入或替换 1-4.插入或忽略 二、大量数据插入 2-1、三种处理方式 2-1-1、单条循环插入 2-1-2、修改SQL语句批量插入 2-1-3、分批量多次循环插入 2-2、插入速度慢的其他几种优化途径...REPLACE INTO:如果插入行出现唯一索引或者主键重复时,则delete老记录,而录入新的记录;如果不会导致唯一索引或者主键重复时,就直接添加新行。...2、在主键或者唯一索引重复时,replace是delete老记录,而录入新的记录,所以原有的所有记录会被清除,这个时候,如果replace语句的字段不全的话,有些原有的比如c字段的值会被自动填充为默认值...在mysql上检测插入一条的速度在0.01s到0.03s之间。 逐条插入的平均速度是0.02*100000,也就是33分钟左右。...REPLACE INTO语法回顾:如果插入行出现唯一索引或者主键重复时,则delete老记录,而录入新的记录;如果不会导致唯一索引或者主键重复时,就直接添加新行。

    1.4K20

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

    MySql插入时唯一键冲突的几种处理方式 MySql插入一条记录,结果提示主键冲突,怎么办?...批量插入数据时,发现插入的这批数据中,有某些记录存在唯一键冲突,一个一个跳出来就比较麻烦了,有什么好的办法直接忽略掉冲突的记录么? 下面简单记录三种处理方式 I....Ignore关键词 某些场景下,我们需要批量插入的数据,某些已经在DB中了,因此我希望在出现冲突时,直接跳过,把能插入的都插入就好,这种情况下,使用ignore关键词就比较合适了 一个实际的case如下...Replace Into方式 如果在批量插入中,存在冲突时,我希望用我的新数据替换旧的数据,这个时候就可以使用replace into了 常用姿势如下 replace into `user` (`id`...ON DUPLICATE KEY UPDATE 在出现冲突时,希望更新某些数据,这个时候就可以在insert语句的最后加上on duplicate key update了 实例如下 insert into

    1.3K20

    面试官:MySQL 唯一索引为什么会导致死锁?

    在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。...,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致重复的问题,则插入新行,跟普通的insert into一样。...死锁 insert … on duplicate key 在执行时,innodb引擎会先判断插入的行是否产生重复key错误,如果存在,在对该现有的行加上S(共享锁)锁,如果返回该行数据给mysql,然后...insert ignore能忽略重复数据,只插入不重复的数据。...replace into和insert … on duplicate key update,都是替换原有的重复数据,区别在于replace into是删除原有的行后,在插入新行,如有自增id,这个会造成自增

    1.7K20

    mysql 唯一索引_mysql主键和唯一索引的区别

    经常导致慢查询,耗时2秒左右,遇忙时更有达到5秒的 改用unique之后,查询耗时在0.0003秒 基本可以忽略不计 三:唯一索引和主键索引的具体区别 1:唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值...在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。...UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致重复的问题,则插入新行,跟普通的insert into一样。...insert ignore能忽略重复数据,只插入不重复的数据。...replace into和insert … on duplicate key update,都是替换原有的重复数据,区别在于replace into是删除原有的行后,在插入新行,如有自增id,这个会造成自增

    2.9K30

    Web 开发 MYSQL 常用方法整理 (上)

    一、数据插入篇 有唯一/主键(primary或者unique)存在时,避免重复插入的方法 在一些报名/拉票类型活动中, 往往需要对uin做唯一键处理,限制1个用户只能有1条报名记录。...,当存在唯一/主键冲突时,则直接忽略最新的insert操作,mysql返回0不报错;没有冲突则正常insert插入数据。...into Replace into,也是可以用于避免数据重复插入的方法,但它与insert ignore最大的不同就是: 当有唯一/主键冲突时,insert ignore是直接忽略新数据,而releace...into 是用新数据整行替换旧数据, 它会先从数据表中删除唯一/主键冲突的行,再尝试插入新行。...如果返回数是1,则说明是首次插入数据; 若返回数是2,则说明在新行插入前,有一行旧数据被删除;若是返回数大于2,则一般是表中有多个唯一索引,有可能是一个单一行替换了多个旧行。

    2K00

    数据操纵:SELECT, INSERT, UPDATE, DELETE

    252 它使得更加容易地移植一个使用对 MySQL 的 ISAM 类似接口的应用程序。 253 它允许你在一个以 SQL 不容易完成(在某些不可能的完全)的情况下遍历一个数据库。...284 285 如果你在一个有许多条记录行值的 INSERT 中指定关键词 IGNORE,任何在表中现有的 PRIMARY 或 UNIQUE 键上重复的记录行均会被忽略而不被插入。...如果你不指定 IGNORE,当有任何记录行在一个现有的键值上重复时,插入均会被中止。你可以通过 C API 函数 mysql_info() 测定共有多少记录行被插入到表中。...286 287 如果你指定 ON DUPLICATE KEY UPDATE 子句(在 MySQL 4.1.0 中被新加入),并且被插入的一个记录行在 PRIMARY 或 UNIQUE 键上将会产生一个重复值...509 510 当你使用一个 REPLACE 时,如果新的记录行代替了老的记录行,mysql_affected_rows() 将返回 2。这是因为在新行被插入之前,重复记录行被先删除了。

    2.3K20
    领券