位置: IT常识 - 正文

MySql -- 不存在则插入,存在则更新或忽略(mysql如果不存在就创建表)

编辑:rootadmin
MySql -- 不存在则插入,存在则更新或忽略 1.前言

推荐整理分享MySql -- 不存在则插入,存在则更新或忽略(mysql如果不存在就创建表),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql表不存在则创建表,mysql不存在的数据类型,mysql不存在则创建表,mysql不存在则增加字段,mysql不存在查询,mysql不存在则新增,mysql不存在则创建表,mysql不存在则增加字段,内容如对您有帮助,希望把文章链接给更多的朋友!

Mysql在插入数据时,需要忽略或替换掉重复的数据(依据某个字段,比如Primary Key或

Unique Key来确定是否重复),这时候我们既可以在应用层处理,也可以使用复杂的 SQL 语句来处理(如果仅仅知道一些简单的 SQL 语法的话),当然也可以使用一些简单的 SQL 语法,不过它并不是通用所有的数据库类型。

下面我们以MySQL为例,研究一下insert 怎样去忽略或替换重复数据

2.表实例

表名称:person

表字段:

Column Name

Primary Key

Auto Increment

Unique

id

true

true

name

true

age

初始表数据:

id

name

age

111

Bruce

36

3.三个简单例子:

Note:本文的3个例子都需要被插入的表中存在UNIQUE索引或PRIMARY KEY字段

1. 不存在则插入,存在则更新1.1 on duplicate key update

如果插入的数据会导致UNIQUE 索引或PRIMARY KEY发生冲突/重复,则执行UPDATE语句,例:

MySql -- 不存在则插入,存在则更新或忽略(mysql如果不存在就创建表)

INSERT INTO `person`(`name`, `age`) VALUES(‘Bruce’, 18) ON DUPLICATE KEY UPDATE `age`=19; – If will happen conflict, the update statement is executed

– 2 row(s) affected

这里受影响的行数是2,因为数据库中存在name='Bruce'的数据,如果不存在此条数据,则受影响的行数为1。

最新的表数据如下:

id

name

age

1

Bruce

18

1.2 replace into

如果插入的数据会导致UNIQUE 索引或PRIMARY KEY发生冲突/重复,则先删除旧数据再插入最新的数据,例:

REPLACE INTO `person`(`name`, `age`) VALUES(‘Bruce’, 20);

– 2 row(s) affected

这里受影响的行数是2,因为数据库中存在name='Jack'的数据,并且id的值会变成2,因为它是先删除旧数据,然后再插入数据,最新的表数据如下:

id

name

age

2

Bruce

20

2. 避免重复插入(存在则忽略)

关键字/句:insert ignore into,如果插入的数据会导致UNIQUE索引或PRIMARY KEY发生冲突/重复,则忽略此次操作/不插入数据,例:

INSERT IGNORE INTO `person`(`name`, `age`) VALUES(‘Bruce’, 18);

– 0 row(s) affected

这里已经存在name='Bruce'的数据,所以会忽略掉新插入的数据,受影响行数为0,表数据不变。

4.三个复杂例子:

我们可以用customerMobile字段作为唯一索引(UNIQUE 索引)

Mapper类:

package com.example.springbootmybatisplusbruce.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.example.springbootmybatisplusbruce.model.E**Customer;import org.apache.ibatis.annotations.Param;import org.springframework.stereotype.Repository;import java.util.List;@Repositorypublic interface E**CustomerMapper extends BaseMapper<E**Customer> { /** * 不存在则插入,存在则更新 * on duplicate key update: 如果插入的数据会导致UNIQUE 索引或PRIMARY KEY发生冲突/重复,则执行UPDATE语句 * @param e**Customer * @return */ public int insertDuplicateKeyUpdate(E**Customer e**Customer); /** * replace into: 如果插入的数据会导致UNIQUE索引 或 PRIMARY KEY 发生冲突/重复,则先删除旧数据,再插入最新的数据 * @param etcCustomer * @return */ public int insertReplaceInto(E**Customer e**Customer); /** * 避免重复插入 * insert ignore into: 如果插入的数据会导致UNIQUE索引或PRIMARY KEY发生冲突/重复,则忽略此次操作/不插入数据 * @param e**Customer * @return */ public int insertIgnore(E**Customer e**Customer);}

xml文件:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.springbootmybatisplusbruce.mapper.E**CustomerMapper"> <resultMap type="com.example.springbootmybatisplusbruce.model.E**Customer" id="E**CustomerResult"> <result property="id" column="id" /> <result property="customerType" column="customer_type" /> <result property="customerName" column="customer_name" /> <result property="customerMobile" column="customer_mobile" /> ....................................................................... </resultMap> <sql id="selectE**CustomerVo"> select id, customer_type, customer_name, customer_mobile,...........................................................................from etc_customer </sql> <!-- 不存在则插入,存在则更新 --> <!-- on duplicate key update: 如果插入的数据会导致UNIQUE 索引或PRIMARY KEY发生冲突/重复,则执行UPDATE语句 --> <insert id="insertDuplicateKeyUpdate" parameterType="com.example.springbootmybatisplusbruce.model.E**Customer"> INSERT INTO e**_customer(id, customer_type, customer_name, customer_mobile, credential_type, credential_no, status, del_flag, create_by, create_time, update_by, update_time, remark) VALUES(#{id}, #{customerType}, #{customerName}, #{customerMobile}, #{credentialType}, #{credentialNo}, #{status}, #{delFlag}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{remark}) ON DUPLICATE KEY UPDATE <if test="customerType != null">customer_type=#{customerType},</if> <if test="customerName != null and customerName != ''">customer_name=#{customerName},</if> <if test="customerMobile != null and customerMobile != ''">customer_mobile=#{customerMobile},</if> <if test="credentialType != null">credential_type=#{credentialType},</if> <if test="credentialNo != null and credentialNo != ''">credential_no=#{credentialNo},</if> <if test="status != null">status=#{status}</if> </insert> <!-- replace into: 如果插入的数据会导致UNIQUE索引 或 PRIMARY KEY 发生冲突/重复,则先删除旧数据再插入最新的数据 --> <insert id="insertReplaceInto"> REPLACE INTO e**_customer(id, customer_type, customer_name, customer_mobile, credential_type, credential_no, status, del_flag, create_by, create_time, update_by, update_time, remark) VALUES(#{id}, #{customerType}, #{customerName}, #{customerMobile}, #{credentialType}, #{credentialNo}, #{status}, #{delFlag}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{remark}) </insert> <!-- 避免重复插入 --> <!-- insert ignore into: 如果插入的数据会导致UNIQUE索引或PRIMARY KEY发生冲突/重复,则忽略此次操作/不插入数据 --> <insert id="insertIgnore"> INSERT IGNORE INTO e**_customer(id, customer_type, customer_name, customer_mobile, credential_type, credential_no, status, del_flag, create_by, create_time, update_by, update_time, remark) VALUES(#{id}, #{customerType}, #{customerName}, #{customerMobile}, #{credentialType}, #{credentialNo}, #{status}, #{delFlag}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{remark}) </insert></mapper>

service类:

package com.example.springbootmybatisplusbruce.service;import com.example.springbootmybatisplusbruce.mapper.ETCCustomerMapper;import com.example.springbootmybatisplusbruce.model.EtcCustomer;import org.apache.commons.io.FileUtils;import org.apache.commons.io.LineIterator;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.util.List;@Servicepublic class FTPFileParseService { @Autowired private E**CustomerMapper e**CustomerMapper; /** * 参考文章:https://blog.csdn.net/t894690230/article/details/77996355 * https://blog.csdn.net/weixin_45607513/article/details/117470118 * @throws IOException */ @Transactional(rollbackFor = Exception.class) public void fileParse() throws IOException { StringBuilder result = new StringBuilder(); String path = "F:\Digital marketing\E** system\txt-from-ftp\20210302_VEHICLE.txt"; long start = System.currentTimeMillis(); //程序执行前的时间戳 BufferedReader br = new BufferedReader(new FileReader(path));//构造一个BufferedReader类来读取文件 String line = null; while((line = br.readLine())!=null){//使用readLine方法,一次读一行// result.append(System.lineSeparator()+s); System.out.println("Debug:" + line); String [] infoArray = line.split("@~@"); EtcCustomer e**Customer = new EtcCustomer(); if(infoArray[0].isEmpty()){continue;} e**Customer.setId(Long.valueOf(infoArray[0]).longValue()); e**Customer.setCustomerType(Long.valueOf(infoArray[4]).longValue()); e**Customer.setCustomerName(infoArray[2]); e**Customer.setCustomerMobile(infoArray[3]); e**Customer.setCredentialType(Long.valueOf(infoArray[5]).longValue()); e**Customer.setCredentialNo(infoArray[6]); e**Customer.setStatus(Long.valueOf(infoArray[15]).longValue()); e**Customer.setDelFlag(0L); //on duplicate key update: 如果插入的数据会导致UNIQUE 索引或PRIMARY KEY发生冲突/重复,则执行UPDATE语句// e**CustomerMapper.insertDuplicateKeyUpdate(etcCustomer); //insert ignore into: 如果插入的数据会导致UNIQUE索引或PRIMARY KEY发生冲突/重复,则忽略此次操作/不插入数据 e**CustomerMapper.insertIgnore(etcCustomer); //replace into: 如果插入的数据会导致UNIQUE索引 或 PRIMARY KEY 发生冲突/重复,则先删除旧数据,再插入最新的数据// e**CustomerMapper.insertReplaceInto(etcCustomer); } br.close(); long end = System.currentTimeMillis(); //程序执行后的时间戳 System.out.println("程序执行花费时间:" + (end - start)); }}

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

本文链接地址:https://www.jiuchutong.com/zhishi/283499.html 转载请保留说明!

上一篇:最薄的平板电脑是什么(最薄的平板电脑是哪种)

下一篇:电脑硬盘跳线设置图解(硬盘跳线设置)

  • 关于网上赚钱的注意事项(关于网上赚钱的作文)

    关于网上赚钱的注意事项(关于网上赚钱的作文)

  • 空调wifi怎么连接手机(空调wifi怎么连接手机 什么原理啊)

    空调wifi怎么连接手机(空调wifi怎么连接手机 什么原理啊)

  • 名片没有朋友圈入口(名片没有朋友圈选项)

    名片没有朋友圈入口(名片没有朋友圈选项)

  • 计算机突然停电什么数据会丢失(计算机突然停电了怎么办)

    计算机突然停电什么数据会丢失(计算机突然停电了怎么办)

  • 微信收款码在哪里(微信收款码在哪里改名字)

    微信收款码在哪里(微信收款码在哪里改名字)

  • iqoo支持hifi吗(iqoo7支持hifi)

    iqoo支持hifi吗(iqoo7支持hifi)

  • 机械键盘换轴必须焊吗(给机械键盘换轴)

    机械键盘换轴必须焊吗(给机械键盘换轴)

  • 芒果tv怎么登别人的vip(芒果TV怎么登别人会员)

    芒果tv怎么登别人的vip(芒果TV怎么登别人会员)

  • 永久删除的视频能恢复吗(相册恢复永久删除的视频)

    永久删除的视频能恢复吗(相册恢复永久删除的视频)

  • 硬盘装不了系统怎么办(硬盘装不了系统什么问题)

    硬盘装不了系统怎么办(硬盘装不了系统什么问题)

  • iPhone 11如何用副号发短信(苹果11如何使用副号)

    iPhone 11如何用副号发短信(苹果11如何使用副号)

  • soul主页可见什么意思(soul 主页可见)

    soul主页可见什么意思(soul 主页可见)

  • 华为荣耀30怎么设置返回键(华为荣耀30怎么截屏)

    华为荣耀30怎么设置返回键(华为荣耀30怎么截屏)

  • iphone x能双卡双待吗(iphone x可以双卡)

    iphone x能双卡双待吗(iphone x可以双卡)

  • ios11什么时候发布的(iphone11多久发布的)

    ios11什么时候发布的(iphone11多久发布的)

  • qq如何自定义在线状态(qq如何自定义在线状态不见了)

    qq如何自定义在线状态(qq如何自定义在线状态不见了)

  • 多次呼转暂时无法接通是什么意思(已经多次呼转)

    多次呼转暂时无法接通是什么意思(已经多次呼转)

  • iphone11没有指纹吗(苹果11手机没有指纹识别功能吗?)

    iphone11没有指纹吗(苹果11手机没有指纹识别功能吗?)

  • 电脑微信群里怎么艾特别人(电脑微信群里怎么直播)

    电脑微信群里怎么艾特别人(电脑微信群里怎么直播)

  • 快手每天可以点多少赞(快手每天可以点击多少非好友关注)

    快手每天可以点多少赞(快手每天可以点击多少非好友关注)

  • 佳能80d拍照模糊怎么调(佳能80d拍照模糊怎么解决)

    佳能80d拍照模糊怎么调(佳能80d拍照模糊怎么解决)

  • 录音怎么弄成文档wps(录音怎么弄成文件格式发送给别人)

    录音怎么弄成文档wps(录音怎么弄成文件格式发送给别人)

  • 鼠标驱动在哪(鼠标驱动在哪里找win7)

    鼠标驱动在哪(鼠标驱动在哪里找win7)

  • sad panda解决办法(panda shaped)

    sad panda解决办法(panda shaped)

  • 一加七pro和一加七的区别(一加七pro和一加8外观)

    一加七pro和一加七的区别(一加七pro和一加8外观)

  • 闲鱼怎么拉出黑名单(闲鱼怎么拉出黑名单的人)

    闲鱼怎么拉出黑名单(闲鱼怎么拉出黑名单的人)

  • qq输入法如何打符号(qq输入法如何打生僻字)

    qq输入法如何打符号(qq输入法如何打生僻字)

  • 个人所得税申报截止时间
  • 给离退休人员发的短信
  • 年报里资产总额能随便填吗
  • 预付卡发票可以报销吗?
  • 事业单位存货发生盘亏或盘盈处理
  • 存货跌价准备计提原则
  • 收回已冲销的坏账分录
  • 结转入库材料计划成本的会计分录例题
  • 坏账转销会计分录应收帐款金额怎么写
  • 受托加工费直接计入生产成本
  • 未支付的款项如何做账
  • 广告传媒公司的名字
  • 有产权车位转让需要什么手续和费用
  • 税法三流合一是哪一项法律依据
  • 其他应付款坏账怎么处理
  • 工资不在本单位拿取的能加入会员吗
  • 广告费预付后收条怎么写
  • 折旧是属于公司成本吗
  • 做进项转出的票据有哪些
  • 营改增后定额材料单价的组成包括
  • 鸿蒙侧边菜单
  • 银行手续费会开发票吗
  • 事业单位年终事迹材料
  • 进项税转出怎么填报表
  • 新建厂房环评流程
  • 物流运输公司要交税吗
  • 购买交易性金融资产时,支付的交易费用应计入
  • 环保税与排污费的联系
  • win10改头像怎么删除以前的头像
  • 系统之家u盘重装系统流程
  • php图片叠加
  • 会计分录内容包括
  • php的图片
  • vue模块拖拽
  • 基于opencv的人脸检测算法
  • 7z命令行详解
  • 金税盘减免税额
  • 工资次月发放法律规定
  • 所得税申报资产总额
  • 帝国cms怎么增加子栏目
  • js中同步如何理解
  • 预收账款多好还是少好
  • 织梦标签理解
  • 综合所得算税公式
  • 物流公司扣押货物算犯法吗
  • 来料加工的账务处理新收入准则
  • 预收款开票后如何做账
  • 视频制作开票属于现代服务吗?
  • 支付行业培训流程
  • 长期股权投资哪一章
  • 购买公司分录怎么写
  • 收到代收款需要开票吗
  • 研发一个月多少钱
  • 挂靠企业电费如何处理?
  • 年底未分配利润在贷方
  • 财务成本控制总结
  • 发票丢失了怎么报销
  • sqlserver数据库建库建表
  • sqlmd5加密后解密
  • cmd提示符基础知识
  • win8无法连接wifi
  • 电脑设置光盘启动方法
  • winole.exe - winole是什么进程
  • mac怎么自定义桌面图标
  • 如何给windowsXP磁盘加密码
  • win7 64纯净版网页打开出现乱码该怎么办 解决方法介绍
  • jquery 动态添加列表元素
  • python数据导出
  • shc加密后不能运行
  • dom的操作
  • android开发指南
  • python爬虫京东
  • python爬虫有道翻译
  • android设计模式单例有几种
  • 广州税务举报电话
  • 立信金融会计学院
  • 安徽国家税务局增值税发票查询平台
  • 小额贷款公司在职人员和离职人员情节哪种轻
  • 北京市平谷区有地铁吗?
  • 省级税务机关是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设