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. 目标检测别再刷榜了,让流感知来展示真正的技术!ECCV 2020 最佳论文提名
  2. 京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我
  3. 数据库同样数据,本地和服务器查询效率相差百倍
  4. oracle system表空间扩容,Oracle 11g system表空间快速增长解决
  5. php公交查询系统源代码,基于Smarty公交查询系统的设计与实现(PHP,MySQL)
  6. 图的深度优先搜索(DFS)和广度优先搜索(BFS)算法
  7. Java面向对象的思想
  8. excel中用正则匹配_Excel 使用正则表达式提取数据
  9. 解读全新闪存FlashSystem 9100
  10. (iphone铃声制作)i39 for mac破解版永久激活方法
  11. 「Computer keyboard」- 在键盘中,手指的摆放位置 @20210331
  12. 文件是存储在计算机外存上的,计算机存储器——内存和外存.doc
  13. 算法设计:2.向下取整、向上取整符号
  14. 虚拟化在防泄密领域的痛点
  15. 搜狗输入html,搜狗输入法:回家的路
  16. 位运算——左移和右移
  17. 南宁供电局抄表及电量电费管理系统的开发设计
  18. 抖音网红是如何推广产品的?
  19. 深圳立仪科技进军2021年DME中国(东莞)机械展会
  20. No repository found at http://m2eclipse.sonatype.org/sites/m2e

热门文章

  1. 学游戏设计要什么学历_游戏设计师就业需要的学历是什么
  2. Modbus RTU通讯实例:安科瑞电表通讯
  3. html的id名字关联符号,和平精英id名字怎么加符号 名字id支持的符号
  4. 大佬分享9条秘籍,小白也能用Python赚钱,网友:不早说!
  5. C#桌面办公应用-工资管理系统系列六
  6. [c语言]三字棋小游戏及大学开始学习c语言感悟
  7. Django搭建个人博客:在博文中发表评论
  8. perl正则表达式匹配任意单字符_PHP七天系列之正则表达式
  9. 如何获取浏览器客户端的唯一标识
  10. CSGO国内开箱网站大全incsgo skinsdog狗网 coolkaixiang 88steam