首页 > 数据库 >实现批量插入和更新(mysql)

实现批量插入和更新(mysql)

时间:2023-11-15 10:33:32浏览次数:40  
标签:批量 item xxx1 xxx2 xxx3 插入 values mysql

在实际数据库应用中,经常需要实现插入或更新(插入新数据,如果已存在则更新已有数据)的功能。然而,在处理大量数据时,频繁的数据库 I/O 操作可能导致性能问题。

MySQL 批量插入和更新

使用INSERT ... ON DUPLICATE KEY UPDATE

MySQL 提供了 INSERT ... ON DUPLICATE KEY UPDATE 语法,通过这个语法可以实现在插入数据时,如果唯一键冲突,则执行更新操作

<insert id="saveOrUpdateBatch">
    insert into table (ID, xxx1, xxx2, xxx3)
    values
    <foreach collection="list" item="item"  separator=",">
      (#{item.ID},#{item.xxx1},#{item.xxx2},#{item.xxx3})
    </foreach>
    on duplicate key update
    xxx1= values(xxx1),
    xxx2= values(xxx2),
    xxx3= values(xxx3)
</insert>

ON DUPLICATE KEY UPDATE 后面是是需要修改的字段

这个sql的核心是通过主键索引唯一索引来判断实现

相关java代码

// mapper
boolean saveOrUpdateBatch(List<Map<String, Object>> list);
//service
@Override
public boolean saveOrUpdateBatch(List<Map<String, Object>> params) {
    return mapper.saveOrUpdateBatch(params);
}

标签:批量,item,xxx1,xxx2,xxx3,插入,values,mysql
From: https://www.cnblogs.com/Cloong/p/17830834.html

相关文章

  • oracle中insert用select方式插入慢的解决之一
    原理我没明白,但是可以解决插入过慢的问题。原SQLINSERT INTO LOGINSTATBYDEPTzsy(group_id, persons, loginTimes, loginPersons, datadate, TYPE)SELECT tg.id, p.persons, sum(lb.LOGINAMOUNT)sum1, count(DISTINCTtu.id)sum2, 1, 2FROM userdaylogini......
  • JDBC之Mysql
    一、JDBC是什么?JavaDataBaseConnectivity(Java语言连接数据库)二、JDBC的本质是什么?JDBC是SUN公司制定的一套接口(interface)。接口都有调用者和实现者。面向接口调用、面向接口写实现类,这都属于面向接口编程。三、为什么要面向接口编程?解耦合:降低程序的耦合度,提高程......
  • MySQL 导出表结构(含列名、数据类型、字段备注注释)导出成Excel
    SELECTCOLUMN_NAME列名,COLUMN_COMMENT名称,column_key主键,--COLUMN_TYPE数据类型,DATA_TYPE字段类型,CHARACTER_MAXIMUM_LENGTH长度,IS_NULLABLE是否必填,--COLUMN_DEFAULT描述FROMINFORMATION_SCHEMA.COLUMNSwhere--developer......
  • 高效使用 PyMongo 进行 MongoDB 查询和插入操作
    插入到集合中:要将记录(在MongoDB中称为文档)插入到集合中,使用insert_one()方法。insert_one()方法的第一个参数是一个包含文档中每个字段的名称和值的字典。importpymongomyclient=pymongo.MongoClient("mongodb://localhost:27017/")mydb=myclient["mydatabase"]mycol=......
  • Mysql中如何解决You can't specify target table '表名' for update in FROM clause报
    Mysql中如何解决Youcan'tspecifytargettable'表名'forupdateinFROMclause报错为什么会出现这个错误呢?这是因为在MySQL使用时,在同一条SQL语句中,不允许先SELECT出同一个表的某些值,再对该表进行UPDATE操作。解决方式#WriteyourMySQLquerystatementbelowdeletef......
  • MYSQL 事务的底层原理
    事务的底层原理在事务的实现机制上,MySQL采用的是WAL:Write-aheadlogging,预写式日志,机制来实现的。在使用WAL的系统中,所有的修改都先被写入到日志中,然后再被应用到系统中。通常包含redo和undo两部分信息。为什么需要使用WAL,然后包含redo和undo信息呢?举个例子,如果一......
  • jdbc批量插入
    1.开启JDBCrewriteBatchedStatements=true2.准备数据PreparedStatementpreparedStatement=connection.prepareStatement(InsertSql);3.插入数据并添加到批次preparedStatement.setObject(columnIndex,resultSet.getObject(columnIndex));preparedStatement.addBatc......
  • Webstorm 快捷键插入注释时,注释从开头开始而不是从光标处开始的解决办法
    前言在vue的模板的template标签内插入注释时,遇到注释都是从当前行的最开始插入,这个主要是配置的问题,今天特意记录一下解决办法在Vue模板中出现的问题,就到代码样式对应的模板中查找。vue的template是和HTML有关联的,所以需要找HTML的代码样式打开设置->编辑器->代码......
  • Windows下如何快速移动MySQL/MariaDB数据库文件
    近期遇到一个要迁移数据库的问题,用户说不希望数据库文件存在于C盘。查了一下资料,这里做个总结。这个方法适用于MySQL和MariaDB。 步骤如下:1、停止数据库服务2、将数据库移动到需要迁移的路径3、修改安装路径data目录下的my.ini文件4、将 datadir=xxx改成需要迁移的路径5......
  • mysql5.7安装插件udp(lib_mysqludf_sys)
    项目应用中需要用mysql执行一下命令行.几经搜索可以安装lib_mysqludf_sys插件可以实现本地window环境安装(mysql8.0,64位,使用lib_mysqludf_sys.dll文件)--查看环境中插件目录showvariableslike'%plugin%';--plugin_dir C:/mysql/lib/plugin/--将lib_mysqludf_sys......