MySQL中的两种特殊插入方式

这篇具有很好参考价值的文章主要介绍了MySQL中的两种特殊插入方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MySQL中的两种特殊插入方式

更新插入(on duplicate key update)

代码案例

PointMapper.java

@Mapper
public interface PointMapper {
        /**
     * on duplicate key update ,是基于主键 或唯一索引 ,已存在数据则执行更新,不存在则执行插入
     */
    int updateBatchByOdku(List<Point> points);

}    

PointMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.orm.dao.PointMapper">
<!--
mysql中的 on duplicate key update ,是基于主键 PK 或唯一索引 UK 使用的
-->
    <update id="updateBatchByOdku" parameterType="java.util.List">
       insert into t_point (id,point_name,point_type)
       values
       <foreach collection="list" item="item" index="index" separator=",">
           (
           #{item.id},
           #{item.pointName},
           #{item.pointType}

           )
       </foreach>
       on duplicate key update
       point_name = values(point_name) ,
       point_type = values(point_type)

    </update>
</mapper>    

替换插入(replace into)

代码案例

PointMapper.java

@Mapper
public interface PointMapper {
     /**
     * replace into ,是基于主键 或唯一索引, 先删除 ,再插入
     */
    int replaceBatch(List<Point> points);

}

PointMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.orm.dao.PointMapper">

<!--
  replace into 语句
  数据已存在,则先删除此行数据,然后插入新数据;
  数据不存在,则直接插入新数据;
  注意:若当前的数据库用户账号没有删除权限,是不能使用replace into 的
-->
    <insert id="replaceBatch" parameterType="java.util.List">
        replace into t_point(id,point_name,point_type)
        values
        <foreach collection="list" item="item" index="index" separator=",">
            (
            #{item.id},
            #{item.pointName},
            #{item.pointType}
            )
        </foreach>
    </insert>
</mapper>       

这两种插入方式的区别

on duplicate key update 和 replace into 是两种处理重复键冲突的方法,但它们具有一些区别

功能不同

on duplicate key update 在插入数据时,如果遇到重复键冲突,会更新已存在的行的值

replace into在插入数据时,如果遇到重复键冲突,会删除已存在的行,并插入新的行

影响的数据行不同

on duplicate key update 只会更新与重复键 冲突的数据行

replace into 删除与重复键 冲突的数据行,并插入一条新的行

对于自增主键的处理

on duplicate key update 当存在重复键冲突时,不会修改自增主键的值

replace into 在插入新的行时,会分配一个新的自增主键值,(最终可能导致自增id耗尽)

执行效率和性能影响

on duplicate key update 适用于只需要更新部分列的场景,并且对于批量更新操作较为高效

replace into 适用于需要替换整行数据的场景,但对于删除和插入操作开销较大,不适用于大量数据的处理


总结

on duplicate key update 更适合在插入重复数据时进行部分列的更新。

replace into更适合替换整行数据,并且需要注意其对自增主键的处理。

在选择使用哪种方法时,根据具体的需求和场景进行选择。文章来源地址https://www.toymoban.com/news/detail-521453.html

到了这里,关于MySQL中的两种特殊插入方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Lumeical Script------Script Prompt 中的两种输出方式

    有时候,和众多编程语言一样,我们需要在 Script Prompt 中打印一些我们已经得到的数据,这样可以方便我们调试代码和查看代码中是否有错误。关于在 Script Prompt 中打印数据,Lumerical Script 提供了两种方法。 如果大家觉得有用,就请点个赞吧~

    2024年02月03日
    浏览(34)
  • 微信小程序中的两种页面跳转方式

    方式一(声明式导航): 利用navigator/navigator url:要跳转页面的地址 open-type:要打开的页面的类型 (不在底部导航中添加的为非导航页面,在的为导航页面)  非导航页面跳转过去后左上角会出现返回箭头,导航页面则没有 index页面   home页面  方式二(编程式导航): 通过触摸事件

    2024年01月19日
    浏览(71)
  • 虚幻学习笔记2—点击场景3D物体的两种处理方式

    一、前言         本文使用的虚幻引擎为5.3.2,两种方式分别为:点击根物体和精准点击目标物体。 二、实现 2.1、玩家控制器中勾选鼠标点击事件:这一步很重要,如图2.1.1所示:在自定义玩家控制器中勾 图2.1.1 选该项,此时鼠标即可点击3D场景中的物体。 2.2、给自定义A

    2024年01月19日
    浏览(44)
  • 简述vue项目中的两种请求方式(axios和vueResource)

    今天学习了vue的两种发送请求的方式,vueResource和axios,比较了两种方式的使用 VueResource模块发送请求 1. VueResource概述 VueJS的生态圈除了VueRouter之外,还有很多的插件,在网络请求中,vue是借助于vue-resource模块来进行异步请求,跨域请求。 vue-resource是Vue.js的一款插件,它可以

    2024年02月03日
    浏览(46)
  • MySQL强制使用索引的两种方式及优化索引,使用MySQL存储过程创建测试数据。

    一、MySQL强制使用索引的两种方式 1、使用 FORCE INDEX 语句: 使用 FORCE INDEX(索引名称)走索引: 2、使用 USE INDEX 语句: 使用 USE INDEX(索引名称)走索引: FORCE INDEX 或 USE INDEX 的区别? FORCE INDEX :这个语句指示MySQL强制查询使用特定的索引。它会忽略优化器的选择,无论索引

    2024年02月03日
    浏览(47)
  • 学习笔记230810--vue项目中get请求的两种传参方式

    问题描述 今天写了一个对象方式传参的get请求接口方法,发现没有载荷,ip地址也没有带查询字符串,数据也没有响应。 代码展示 错误分析 实际上这里的 query 是对象方式带参跳转的参数名,而get方法对象方式传参的参数名是parmas 解决方法 get请求有两种带参的方式 方式1 :

    2024年02月10日
    浏览(43)
  • 数据交互系列:简述vue项目中的两种请求方式(axios和vueResource)

    今天学习了vue的两种发送请求的方式,vueResource和axios,比较了两种方式的使用 VueResource模块发送请求 1. VueResource概述 VueJS的生态圈除了VueRouter之外,还有很多的插件,在网络请求中,vue是借助于vue-resource模块来进行异步请求,跨域请求。 vue-resource是Vue.js的一款插件,它可以

    2024年02月02日
    浏览(45)
  • C语言——读写TXT文件中的(多行多列矩阵型)浮点型数据的两种方式

    文本行输入函数:fgets(读文本) 函数原型 参数 str – 这是指向一个字符数组的指针,该数组存储了要读取的字符串。 n – 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。 stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字

    2023年04月08日
    浏览(38)
  • MyBatis-plus中的两种快捷操作数据库方式:1、mapper调用 2、ActiveRecord方式(简称AR) 二者的使用和区别介绍

            在使用MyBatis操作数据库时,需要频繁的写mapper层dao接口以及对应的配置文件和SQL语句,当功能方法繁杂,业务逻辑不复杂的时候,我们可以使用MyBatis的升级版MyBatis-Plus来代替我们写这些繁琐的配置文件和简单的SQL。 (1)书写或使用MP生成数据库表对应的实体类。

    2024年02月07日
    浏览(61)
  • 封装axios的两种方式

    作为前端工程师,经常需要对axios进行封装以满足复用的目的。在不同的前端项目中使用相同的axios封装有利于保持一致性,有利于数据之间的传递和处理。本文提供两种对axios进行封装的思路。 首先导入了 axios, AxiosInstance和AxiosResponse模块 ,用于创建一个http请求的实例和处理

    2024年02月08日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包