1. 背景

向数据库插入数据,希望去重插入。

2. 操作一下

一般去重插入有两种策略:

  1. 重复不插入
  2. 重复则替换(更新)

准备表:

CREATE TABLE `user_info`  (`id` int(11) NOT NULL COMMENT 'id',`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名',`idcard` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '身份证号',`nick_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '昵称',`remark` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `idcard`(`idcard`) USING BTREE COMMENT '唯一身份标识'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

其中 id 是主键, idcard是唯一索引。

2.1 重复不插入策略

2.1.1 ignore
-- INSERT IGNORE
INSERT IGNORE INTO user_info (id, username, idcard, nick_name) VALUES (3,'zhangsan', '002', '');

此方案要求有主键或唯一索引,且是主键或唯一索引重复方可触发。

2.1.2 条件判断
-- NOT EXISTS 与ignore类似 重复则不插入
INSERT INTO user_info (id, username, idcard, nick_name) SELECT 1,'张无忌', '001', '-' FROM DUAL WHERE NOT EXISTS (SELECT idcard FROM user_info WHERE idcard = '001') ;

此方案不需要主键或唯一索引,当满足不存在条件时,执行插入

2.2 重复替换策略

2.2.1 ON duplicate KEY UPDATE
-- ON duplicate KEY UPDATE
INSERT INTO user_info (id, username, idcard, nick_name) VALUES (3,'zhangsan', '002', '哈哈') ON DUPLICATE KEY UPDATE username = '王五3',nick_name = '李白';

此方案要求有主键或唯一索引,且是主键或唯一索引重复方可触发。
注意:条件触发后,将是后面update语句生效。

2.2.2 REPLACE INTO
-- REPLACE INTO
REPLACE INTO user_info (id, username, idcard, nick_name) VALUES (1,'张无忌', '001', '-');

此方案要求有主键或唯一索引,且是主键或唯一索引重复方可触发。触发后将替换原有数据。
另外,重复替换策略语句生效后将造成两条数据影响。

MySQL去重插入方法相关推荐

  1. 做了6年的Java,mysql去重查询方法

    前言: 求职季在即,技巧千万条,硬实力才是关键,听说今年疫情大环境不好,更要好好准备才行.MySQL是Java程序员面向高级的必备技能,很多朋友在面试时经常在这里折戟沉沙,饮恨不已.熟练掌握MySQL ...

  2. mysql去重查询的三种方法

    文章目录 前言 一.插入测试数据 二.剔除重复数据方法 1.方法一:使用distinct 2.方法二:使用group by 3.方法三:使用开窗函数 总结 前言 数据库生成环境中经常会遇到表中有重复的 ...

  3. mysql如何防止插入重复数据_防止MySQL重复插入数据的三种方法

    新建表格 CREATE TABLE `person` ( `id` int NOT NULL COMMENT '主键', `name` varchar(64) CHARACTER SET utf8 C ...

  4. mysql 禁止插入重复数据_防止MySQL重复插入数据的三种方法

    新建表格 CREATE TABLE `person` ( `id` int NOT NULL COMMENT '主键', `name` varchar(64) CHARACTER SET utf8 C ...

  5. mysql去重函数的使用方法_MySQL中使用去重distinct方法的示例详解

    一 distinct 含义:distinct用来查询不重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而 ...

  6. python随机数据库_Python实现生成随机数据插入mysql数据库的方法

    本文实例讲述了Python实现生成随机数据插入mysql数据库的方法.分享给大家供大家参考,具体如下: 运行结果: 实现代码: import random as r import pymysql fi ...

  7. mysql 批量插入数据方法_mysql大批量插入数据的4种方法示例

    前言 本文主要给大家介绍了关于mysql大批量插入数据的4种方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法一:循环插入 这个也是最普通的方式,如果数据量不是很大,可以使用, ...

  8. php mysql 去重_mysql去重的两种方法实例详解

    这篇文章主要介绍了mysql去重的两种方法详解及实例代码的相关资料,这里对去重的两种方法进行了一一实例详解,需要的朋友可以参考下 mysql去重 方法一: 在使用MySQL时,有时需要查询出某个字段不 ...

  9. node.js中mysql批量插入更新的三种方法

    [背景]在项目中遇到一个批量插入数据的需求,由于之前写过的sql语句都是插入一个对象一条数据,于是去网上搜关键词 "sql批量插入"."mysql批量插入"等, ...

最新文章

  1. 判断奇偶microsoft visual basic_#梅园# 在心理学上面如何判断一个男生暗恋你的表现...
  2. opennms mysql_MySQL用户工具
  3. 条件随机场(CRF)相关理论知识
  4. JeecgBoot单体升级微服务之一
  5. Learn OpenGL(一)图形渲染管线(Pipeline)
  6. 探索python--Robert J. Brunner
  7. 关于SQL92标准和Sybase,SQLServer2000,Oracle的数据类型对比关系
  8. java生成图表_java实现将数据生成图表至excel导出
  9. 计算机 网络发现不了电脑,win10网络发现已关闭网络计算机和设备不可见怎么办?...
  10. TCP连接大量CLOSE_WAIT状态问题排查
  11. 好佳居窗帘十大品牌 窗帘选配有什么方法
  12. 【汇正财经】上证50逆势收涨,大盘健康震固
  13. 星火计划 | Apache InLong一站式大数据接入平台沙龙火热报名中
  14. python 制作抽奖箱_抽奖箱怎么做
  15. Debian如何更换apt源
  16. AVX | 关于RC电路耦合、相移、滤波、微分、积分的那些事儿~
  17. EasyAR_实现扫描识别图播放视频
  18. 基于python实现openai可结合上下文的问答,含html在线版
  19. Symantec 和sep卸载密码方法
  20. Python使用Selenium WebDriver的入门介绍及安装教程

热门文章

  1. 不让须眉 见证赛场“她”力量
  2. 我的世界java什么村民卖地图_教程/村民交易大厅
  3. Xmind2022 for Ubuntu(一百四十三)
  4. history.pushState 实际使用场景
  5. cf1月超级翻盘_CF1月超级翻牌活动
  6. python语言的33个保留字的基本含义_Python入门系列5-保留字和标识符
  7. 射雕中金句摘录与感悟
  8. 观点八、老板是最大的策划人
  9. 思科交换机不恢复配置重置特权密码
  10. Angular4.0_路由守卫