-
mysql中一条insert语句批量插入多条记录
2017-07-20 15:39:23插入语句常用写法: INSERT INTO items(name,city,price,number,picture) VALUES('耐克运动鞋','广州',500,1000,'003.jpg'); 这种方式只能够一次插入一条数据,要想插入多条数据,就得多次调用此sql语句,意味着多...插入语句常用写法:
INSERT INTO items(name,city,price,number,picture) VALUES('耐克运动鞋','广州',500,1000,'003.jpg');
这种方式只能够一次插入一条数据,要想插入多条数据,就得多次调用此sql语句,意味着多次与数据库建立连接。但是这样一来,就会增加服务器的负荷,因为,执行每一次SQL服务器都要同样对SQL进行分析、优化等操作。幸好MySQL提供了另一种解决方案,就是使用一条INSERT语句来插入多条记录。这并不是标准的SQL语法,因此只能在MySQL中使用。
一条INSERT语句插入批量数据的写法:
INSERT INTO [表名]([列名],[列名]) VALUES ([列值],[列值])), ([列值],[列值])), ([列值],[列值]));
可以看到,和原来的常规INSERT语句的区别,仅仅是在VALUES 后面增加值的排列,每条记录之间用英文输入法状态下的逗号隔开,是不是so easy。
示例:
INSERT INTO items(name,city,price,number,picture) VALUES ('耐克运动鞋','广州',500,1000,'003.jpg'), ('耐克运动鞋2','广州2',500,1000,'002.jpg');
这样,就实现了一次性插入了2条数据。
建议:
在程序中,插入批量数据时,最好使用这种通过一条INSERT语句来一次性插入的方式。这样可以避免程序和数据库建立多次连接,从而增加服务器负荷。
欢迎关注微信公众号(Java修炼记):
专注Java技术积累,免费分享Java技术干货、学习笔记、学习资料等,致力于让这里成为一个java知识小站。
-
算法 - 插入排序(C#)
2019-02-01 10:58:01分享一个大牛的人工智能教程。... * 每次从无序表中取出第一个元素,把它插入到有序表的合适位置使有序表仍然有序,直至无序表中所有元素插入完为止。 * 第一趟扫描前两个数,然后把第二个数按大小...分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net
/* * 直接插入排序(straight insertion sort)的做法是: * 每次从无序表中取出第一个元素,把它插入到有序表的合适位置使有序表仍然有序,直至无序表中所有元素插入完为止。 * 第一趟扫描前两个数,然后把第二个数按大小顺序插入到有序表中; * 第二趟把第三个数与前两个数从前向后扫描,把第三个数按大小插入到有序表中; * 依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。 * * 直接插入排序属于稳定的排序,最坏时间复杂度为O(n^2),空间复杂度为O(1)。 * * 直接插入排序是由两层嵌套循环组成的。 * 外层循环标识并决定待比较的数值,内层循环为待比较数值确定其最终位置。 * 直接插入排序是将待比较的数值与它的前一数值进行比较,所以外层循环是从第二个数值开始的。 * 当前一数值比待比较数值大的情况下后移该数值并继续循环比较, * 直到找到比待比较数值小的并将待比较数值插入其后一位置,结束该次循环。 * 值得注意的是,我们必需用一个存储空间来保存当前待比较的数值, * 因为当一趟比较完成时,我们要将待比较数值插入比它小的数值的后一位置。 * 插入排序类似于玩纸牌时整理手中纸牌的过程。 */ namespace InsertionSort { using System; /// <summary> /// The program. /// </summary> public static class Program { /// <summary> /// The main. /// </summary> public static void Main() { int[] a = {1, 4, 6, 2, 8, 7, 9, 3, 5, 10}; Console.WriteLine("Before Insertion Sort:"); foreach (int i in a) { Console.Write(i + " "); } Console.WriteLine("\r\n\r\nIn Insertion Sort:"); InsertionSort(a); Console.WriteLine("\r\nAfter Insertion Sort:"); foreach (int i in a) { Console.Write(i + " "); } } /// <summary> /// The insertion sort. /// </summary> /// <param name="a"> /// The a. /// </param> public static void InsertionSort(int[] a) { // 从第二个元素开始迭代。 for (int i = 1; i < a.Length; i++) { // 存储待插入的元素。 int tmp = a[i]; int j = i - 1; // 从当前元素右边寻找插入点。 while (a[j] > tmp) { // 后移。 a[j + 1] = a[j]; j--; if (j == -1) { break; } } // 该后移的元素已经后移了,会留下一个空位置,这个位置就是待插入元素的插入点。 a[j + 1] = tmp; // 打印数组。 foreach (int k in a) { Console.Write(k + " "); } Console.WriteLine(string.Empty); } } } } // Output: /* Before Insertion Sort: 1 4 6 2 8 7 9 3 5 10 In Insertion Sort: 1 4 6 2 8 7 9 3 5 10 1 4 6 2 8 7 9 3 5 10 1 2 4 6 8 7 9 3 5 10 1 2 4 6 8 7 9 3 5 10 1 2 4 6 7 8 9 3 5 10 1 2 4 6 7 8 9 3 5 10 1 2 3 4 6 7 8 9 5 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 After Insertion Sort: 1 2 3 4 5 6 7 8 9 10 */
-
mybatis 插入大量数据效率对比,foreach插入、SqlSession批量插入、sql插入
2020-05-14 11:26:28使用mybatis插入数据执行效率对比,对比三种方式, 1 使用 SqlSessionFactory,每1000条数据执行一次提交 2 使用mybatis-plus框架的insert方法,for循环,每次执行一次插入 3 使用ibatis,纯sql插入 先贴出执行...使用mybatis插入数据执行效率对比,对比三种方式(测试数据库为MySQL),
1 使用 SqlSessionFactory,每一批数据执行一次提交
2 使用mybatis-plus框架的insert方法,for循环,每次执行一次插入
3 使用ibatis,纯sql插入
新增xml执行效率测试:xml执行时间比sql稍慢一些,50000条数据插入时间约为2000毫秒左右,平均时间是sql的2倍左右。
先贴出执行效果(数字代表执行的时间,单位毫秒):
测试代码:
//测试类 @RunWith(SpringRunner.class) @SpringBootTest(classes = DemoApplication.class) public class Test1 { @Autowired UsersMapper usersMapper; @Autowired SqlSessionFactory sqlSessionFactory; public List<Users> list = new ArrayList<>(); @Before public void getList() { long start = System.currentTimeMillis(); Users user; for (int i = 1; i <=50000 ; i++) { user = new Users(); user.setId(i); user.setName("java"); user.setAge(200); user.setManagerId(222); list.add(user); } System.out.println("拼装数据 耗时:"+(System.currentTimeMillis()-start)); System.out.println(list.size()); } @Test public void batchInsert() { SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false); UsersMapper mapper = sqlSession.getMapper(UsersMapper.class); System.out.println("batchInsert 插入开始========"); long start = System.currentTimeMillis(); for (int i = 0; i < list.size(); i++) { mapper.insert(list.get(i)); if (i%5000==4999) { sqlSession.flushStatements(); // sqlSession.commit(); // sqlSession.clearCache(); } } // sqlSession.commit(); // sqlSession.clearCache(); sqlSession.flushStatements(); System.out.println("SqlSession 批量插入耗时:"+(System.currentTimeMillis()-start)); } @Test public void forEachInsert() { System.out.println("forEachInsert 插入开始========"); long start = System.currentTimeMillis(); for (int i = 0; i < list.size(); i++) { usersMapper.insert(list.get(i)); } System.out.println("foreach 插入耗时:"+(System.currentTimeMillis()-start)); } @Test public void sqlInsert() { System.out.println("sql 插入开始========"); long start = System.currentTimeMillis(); usersMapper.sqlInsert(list); System.out.println("sql 插入耗时:"+(System.currentTimeMillis()-start)); } //xml批量插入 @Test public void xmlInsert() { System.out.println("xmlInsert 批量插入开始========"); long start = System.currentTimeMillis(); usersMapper.xmlBatchInsert(list); System.out.println("xmlInsert 批量插入耗时:"+(System.currentTimeMillis()-start)); } } //sql插入相关类 @Repository public interface UsersMapper extends BaseMapper<Users> { @InsertProvider(type = UsersProvider.class, method = "insertListSql") public void sqlInsert(List<Users> list); public void xmlBatchInsert(@Param("list") List<Users> list); } public class UsersProvider { public String insertListSql(List<Users> list) { StringBuffer sqlList = new StringBuffer(); sqlList.append(" INSERT INTO users(id,name,age,manager_id) VALUES "); for (int i = 0; i < list.size() ; i++) { Users user = list.get(i); sqlList.append(" (").append(user.getId()).append(",").append("'").append(user.getName()).append("',").append(user.getAge()) .append(",").append(user.getManagerId()).append(")"); if (i < list.size()-1) { sqlList.append(","); } } return sqlList.toString(); } } //xml 插入mapper文件 <?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.dao.UsersMapper"> <insert id="xmlBatchInsert"> INSERT INTO users(id,name,age,manager_id) VALUES <foreach collection="list" item="item" index="index" separator=","> (#{item.id}, #{item.name}, #{item.age}, #{item.managerId}) </foreach> </insert> </mapper>
总结:
sql插入的效率最高,sqlsession次之,mybatis框架foreach插入效率最低。
执行效率echarts图:
-
如何优雅的在 Microsoft word中插入代码
2018-03-11 20:44:29一、工具方法1.打开这个网页PlanetB;...将你需要插入在word中的代码完整的复制到该网站提示的文本框内,选择你的代码类型,如C,C++,HTML等,并点击提交。如下图:2.该网页会自动将该代码生成到一个新的页面,此时ct...一、工具
方法1.打开这个网页PlanetB;
方法2.或者谷歌搜索syntax highlight code in word documents,检索结果的第一个。如下图:
PS. 方法1和2打开的为同一个网站。
二、步骤
1.将你需要插入在word中的代码完整的复制到该网站提示的文本框内,选择你的代码类型,如C,C++,HTML等,并点击提交。如下图:
2.该网页会自动将该代码生成到一个新的页面,此时ctrl+A全选,后ctrl+c复制到word中粘贴就好。如下图:
三、体验
以下为本次实验代码在word中的对比图。
1.和单纯的复制粘贴相比
2.和简单的加入一个灰色无边框的1*1表格相比
PS.由于此次测试使用的代码并不是用常见的语言编写的,所以并没有起到很好的代码高亮作用,在word中还会出现英语的语法错误。
可在word中设置仅对该文档不使用语法检查。下图为关闭语法错误提示后的效果对比。
-
Oracle 批量插入(insert all into)
2018-06-14 13:40:34项目需要用到导入excel表,并解析数据批量插入到oracle数据库中。 1)直接解析excel,循环行,拼了sql,executeUpdate。 执行一波… 咦,这效率很低啊,有多少行数据就执行了多少句sql,基本是一万行已经接近... -
排序算法~插入类排序
2020-08-27 21:04:56插入类排序 本文是上一篇文章的后续,详情点击该链接~ 简介 在一个已经有序的序列中,插入一个新的元素到合适的位置中。我们就把它称之为插入类排序。这类排序比较常见的有... -
Mysql插入语句之value与values区别
2016-09-13 16:13:42看了一下官方文档,VALUE与VALUES都是正确的,经过验证,这两个也是可以混合着用的,只是两者对不同语句插入数量的执行效率各不相同。 VALUE插入一行 VALUES插入一行 可以看出在插入单行时,使用VALUES比较 -
INSERT 语句 增加条件,条件成立插入,否则不插入
2017-06-07 03:09:29遇到一个sql插入的场景,就是在sql插入新数据的时候,直接在sql中判断条件是否满足,如果条件不满足则不插入新数据,某则插入新数据。 这里的场景是给用户发放金币,那么就有两个问题是需要注意的 1、用户可以领取... -
插入排序
2019-12-09 19:49:16一、插入排序(InsertSort) 插入排序从第二个数开始,拿出第二个数进行向前插入排序,一直到最后一个数向前做插入排序。算法稳定。 插入排序的时间复杂度为O(n^2),空间复杂度为O(1)。最好的时间复杂度是O(n),最... -
Mybatis批量插入返回插入成功后的主键id
2017-02-13 12:48:06我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: 1、对于支持生成自增主键的数据库:增加 useGenerateKeys和keyProperty ,标签属性。 2、不支持生成自增主键的数据库:使用。 但是怎么对批量... -
插入排序(图解)
2019-05-20 10:58:28插入排序 1、直接插入排序 基本思想:每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到插完所有元素为止。 算法实现:直接插入排序是将无序序列中的数据插入到有序的序列中,在遍历无序序列时,... -
MySQL批量插入与更新
2019-05-20 16:07:36replace into与insert into on duplicate key update都可以实现批量的插入更新,更新还是插入取决与记录中的pk或uk,前者是先delete后insert,后者是update。 3. insert ignore into会忽略很多数据上的冲突与约束... -
mybatis mysql insert 批量插入/插入list/动态插入
2019-06-03 14:43:501.批量插入: 普通插入 INSERT INTO TBL_TEST (id) VALUES(1); 由于性能的瓶颈问题,MYSQL官方文档提到了使用批量化插入的方式,也就是在一句INSERT语句里面插入多个值。即, INSERT INTO TBL_TEST (id) ... -
插入排序之直接插入排序
2018-12-04 17:29:27插入排序之直接插入排序 -
排序算法 插入排序(直接插入排序、半插入排序、希尔排序)
2019-10-19 14:46:31一、直接插入排序。 1、介绍。 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。... -
mysql批量插入数据,一次插入多少行数据效率最高?
2019-08-18 21:41:03文章目录一、前言二、批量插入前准备1、插入到数据表的字段2、计算一行字段占用的空间3、在数据里做插入操作的时候,整体时间的分配三、批量插入数据测试1、SQL语句的大小限制2、查看服务器上的参数:3、计算一次能... -
单链表插入节点——尾部插入
2019-05-23 09:51:14首先构建一个节点结构体 创建构造节点的函数 尾部插入函数 打印插入结果 输出结果 -
oracle一次插入多条数据(insert all)
2018-04-19 15:43:24公司的项目,有个功能每次使用需要向数据库插入很多数据,导致页面等待很长时间才有结果。 数据库:oracle11g id:采用sequence自增 每次循环,都会查询一次sequence,然后insert一条数据,性能非常低。 改进 ... -
vim插入
2018-10-13 07:06:46字符位置插入 i 在光标之前插入 a 在光标之后追加 行位置插入 A 在一行的结尾处追加 I 在一行的开头处插入 o 在光标所在位置的下一行打开新行插入 O 在光标所在位置的上一行打开新行... -
MyBatis-Plus 批量插入
2019-08-09 18:51:35spring boot+mybatis plus环境,单条插入用的是BaseMapper自带的insert方法 public ApiResult addAnc(Anc anc) { ApiResult result = new ApiResult(); Integer insert = ancMapper.insert(anc); if... -
C++插入排序
2021-02-16 11:30:57文章目录前言一、插入排序的基础知识点1.插入排序的排序原理2.插入排序的所属类别3.插入排序的算法复杂度二、插入排序动态图三、代码总结 前言 今天来和大家分享插入排序。 一、插入排序的基础知识点 1.插入排序... -
插入排序法(详细介绍)
2019-05-13 21:26:22前面我的博文中详细介绍了冒泡排序法、选择排序法,今天我们继续学习另一种排序方法—插入排序,分为前插排序和后插排序。 插入排序的基本思想是:将数组的第一个数认为是有序数组,从后往前(从前往后)扫描该有序... -
sed插入行
2019-03-05 17:33:40sed插入行 -
sql插入数据时自动插入时间
2019-02-26 23:13:451:第一种方式:sql数据库在插入一条数据时自动插入时间通常的方式是在插入的sql语句中使用数据库的时间函数进行处理。 sqlserver的时间函数getdate()函数就带代表当前的时间(只数据库服务器的当前时间)。 参考代码:... -
73-插入排序——直接插入排序
2018-08-16 16:24:251. 插入排序 插入排序的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子表中的适当位置,直到全部记录插入完成为止。 2. 直接插入排序 假设待排序的记录存放在数组R[0 .. n... -
批量插入之分批事务插入
2017-10-25 11:51:23方案:分批事务插入 //DataModel 为自定义的数据模型类,dataList 即传入的即将要插入的数据集合; public int insertData(List dataList) throws ClassNotFoundException, SQLException { //设定每批、每次事务... -
论文参考文献正确插入方法 (一)
2018-12-07 12:32:39论文参考文献正确插入方法 (一) 在论文写作中,尤其当参考文献较多时。对参考文献的插入和更改尤为麻烦。而office word自带的功能中是可以解决这个问题的。下面来详细的介绍一下操作步骤。 1 准备 工具:Office...
-
MySQL 性能优化(思路拓展及实操)
-
使用vue搭建微信H5公众号项目
-
C语言零基础入门(详细讲解)
-
Samba 服务配置与管理
-
2020年Java面试208题 009-String类的常用方法有哪些
-
JAVA 8与JAVA 11到底该怎么选?
-
如何开通流量主
-
vue-demo2.zip
-
西门子 电气设备选型资料大全 (适合刚刚入行的电气工程师对设备进行选型规划)详解 报价
-
【硬核】一线Python程序员实战经验分享(1)
-
PHP生成伪随机数
-
基于对偶四元数的姿轨耦合动力学模型1.md
-
NFS 网络文件系统
-
py课程设计.zip
-
阿里云存储面试题偏向系统底层
-
公安系统集成项目标准汇总
-
【福尔摩斯探案集】数据库和应用程序时间出现14小时时差之迷
-
linux c MD5加密 程序源代码 和 测试程序
-
Mysql数据库面试直通车
-
计算 java_两种计算Java对象大小的方法objectFieldOffset