目录

准备表和测试数据

insert into values、insert into select

replace into

insert into on duplicate key update

insert ignore into

总结


准备表和测试数据

CREATE TABLE `t` (`id` int(11) NOT NULL,`age` int(11) DEFAULT NULL,`name` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `t_copy` (`id` int(11) NOT NULL,`age` int(11) DEFAULT NULL,`name` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- t_copy 创建两条条数据
INSERT INTO t_copy VALUES (3, 30, 'c'),(4, 22, 'd');

insert into values、insert into select

INSERT INTO t
VALUES(1, 20, 'a'),(2, 26, 'b');-- 两张表的字段要一一对应
INSERT INTO t SELECT id,age,name from t_copy where id < 10;

结果:

1  20  a
2  26  b
3  30  c
4  22  d

注:insert into values 或 insert into select批量插入时,都满足事务的原子性与一致性,一条出错整体都会回滚。在使用insert into select时,MySQL会对select的数据加S(读)锁,在事务较为复杂的场景下可能有死锁的风险,下篇博客会总结。


replace into

replace into表示插入替换数据,当记录中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据替换(先delete再insert),如果没有数据效果则和insert into一样。

REPLACE INTO t (id,age) VALUES (2, 15);

结果:

1  20  a
2  15  NULL
3  30  c
4  22  d


insert into on duplicate key update

insert into on duplicate key update表示插入更新数据,当记录中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据更新(update),如果没有数据效果则和insert into一样。

INSERT INTO t (id, age)
VALUES (3, 28),(4, 29)
ON DUPLICATE KEY UPDATEid = VALUES(id),age = VALUES(age);

结果:

1  20  a
2  15  NULL
3  28  c
4  29  d


insert ignore into

insert ignore into表示尽可能的忽略冲突,暴力插入。

INSERT IGNORE INTO t VALUES(1,30,'f'),(6,33,'o');

结果:

1  20  a
2  15  NULL
3  28  c
4  29  d
6  33  o

注:可以看到,虽然记录为1的数据会产生主键冲突,但insert ignore into会进行忽略,继续执行记录6的插入。另外除了唯一约束的冲突,类似于字段超出长度、类型不匹配等错误,insert into on duplicate key update与replace into都会整体失败,而insert ignore into不会失败,它对于类型不匹配且无法转化的提供了默认值,超出长度的按照最大长度进行了截取。


总结

  1. insert into values 或 insert into select批量插入时,都满足事务的原子性与一致性,但要注意insert into select的加锁问题。
  2. replace into与insert into on duplicate key update都可以实现批量的插入更新,具体是更新还是插入取决与记录中的pk或uk数据在表中是否存在。如果存在,前者是先delete后insert,后者是update。
  3. insert ignore into会忽略很多数据上的冲突与约束,平时很少使用。

MySQL批量插入与更新相关推荐

  1. mysql批量插入跟更新_Mysql批量插入和更新的性能-问答-阿里云开发者社区-阿里云...

    利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题. 1.批量插入.我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不 ...

  2. mysql批量插入跟更新_Mysql批量插入和更新的性能

    利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题. 1.批量插入.我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不 ...

  3. Mysql批量插入更新性能优化

    Mysql批量插入更新性能优化 对于数据量较大的插入和更新,因io/cpu等性能瓶颈,会产生大量的时间消耗,目前主流的优化主要包括预编译.单条sql插入多条数据.事务插入等,下面详细介绍一下: 单条插 ...

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

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

  5. Mysql批量插入数据问题解决和优化

    Mysql批量插入数据问题解决和优化 一.问题描述 项目中mysql批量插入大概50000左右数据,使用事务和批量,但是速度依旧很慢,大约60s左右,迫切希望改进这个问题. 二.问题原因 尽管是批量a ...

  6. 批量插入或更新数据(MyBatis-plus框架)

    目录 1.场景说明 2.DUPLICATE 和REPLACE比较 3.批量插入或者更新(两种方式) 方式一:mybatis-plus的saveOrUpdateBatch方法 问题:如果操作类集成了基础 ...

  7. pg批量插入_PostgreSQL实现批量插入、更新与合并操作的方法

    前言 就在 2019 年 1 月份微软收购了 PostgreSQL 数据库的初创公司 CitusData, 在云数据库方面可以增强与 AWS 的竟争.AWS 的 RDS 两大开源数据库就是 MySQL ...

  8. PostgreSQL实现批量插入、更新与合并操作的方法_PostgreSQL_脚本之家

    前言 就在 2019 年 1 月份微软收购了 PostgreSQL 数据库的初创公司 CitusData, 在云数据库方面可以增强与 AWS 的竟争.AWS 的 RDS 两大开源数据库就是 MySQL ...

  9. MYSQL批量插入数据库实现语句性能分析

    MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下   CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( ...

最新文章

  1. Android开发之LisitView的图文并排效果实现(源代码分享)
  2. python横向合并merge_【Python代替Excel】7:merge、concat、append
  3. AT2165-[AGC006D]MedianPyramidHard【二分,贪心】
  4. [转载]eXeScope 6.50本地溢出分析
  5. mysql gtid 主键冲突_数据库开启gtid时,需要注意的问题
  6. matlab极坐标下的二维傅里叶变换_形象理解二维傅里叶变换
  7. 【并查集】Union Find
  8. oracle查询:分组查询,取出每组中的第一条记录
  9. httprunner接口测试脚本自动生成
  10. Jenkins中的一些问题解决(~~不断更新~~)
  11. Python替换多个tomcat端口号
  12. 荣耀9桌面没有计算机,荣耀9四个隐藏功能,你用过几个?
  13. keybert:基于bert模型的关键词抽取工具
  14. solidworks图纸模板添加_「solidworks工程图模板」solidworks怎么添加置工程图模板? - seo实验室...
  15. githup找回被删除的文件
  16. 关于MySQL的驱动org.gjt.mm.mysql.Driver
  17. Linux下clock_gettime函数详解
  18. ChatGPT技术原理 第七章:Seq2Seq模型
  19. 动态网站数据采集 - 去哪儿网火车票查询爬虫
  20. cordova在使用jqmobile中出现的问题(使用$(window).on与window.addEventListener)

热门文章

  1. 播音主持专业艺考的服装搭配技巧
  2. Excel(WPS部分功能不适用)技巧:快速找出重复值
  3. 记录ie不支持 for of 解决办法
  4. 神经网络十大算法有哪些,神经网络十大算法排名
  5. 智能家居(8) —— 香橙派摄像头加入设备工厂
  6. 2022年1~7月语音合成(TTS)和语音识别(ASR)论文月报
  7. 记我的服务器被勒索病毒攻击的经历
  8. [C++ Primer] C4
  9. 华为手机开启USB调试,一直弹出
  10. 数据库知识点+sql语句增删改查(详解)