文档章节

MYSQL 存储过程 批量插入

Zorn
 Zorn
发布于 2017/04/22 21:40
字数 407
阅读 12
收藏 0

上周项目有个需求,是批量创建一些数据。本来是想在NodeJS直接写个程序的,但后来想想,要是别的地方也有这个需求,不得又把这个批量创建程序重新写一遍?这样不合理,所以就想着写一个存储过程,方便调用管理。

首先,创建一个test表。字段有自增id、名称、创建时间这三个字段

CREATE TABLE `test` (
`id`  int(10) NOT NULL AUTO_INCREMENT ,
`name`  varchar(30) NOT NULL ,
`create_time`  int(10) NOT NULL ,
PRIMARY KEY (`id`)
)

然后创建一个存储过程

CREATE PROCEDURE `insertTestA`(IN `num` int(11),IN `name` varchar(30))
BEGIN
	DECLARE i SMALLINT(2) DEFAULT 1;
	WHILE i < num DO
		INSERT INTO test (`name`, `create_time`) VALUES (name, i, UNIX_TIMESTAMP());
		SET i = i + 1;
	END WHILE;
END;

这样就写好了一个批量插入的存储过程,然后测试一下

CALL insertTestA (1000, 'abc')

执行了很多次,运行时间大概是0.05S左右

然后想着每次都要执行一次语句很麻烦,看把全部拼成一条语句执行能不能快一点

CREATE PROCEDURE `insertTestB`(IN `num` int(11), IN `name` varchar(30))
BEGIN
	DECLARE i SMALLINT(2) DEFAULT 1;
	SET @insertSQL = 'INSERT INTO test (`name`, `create_time`) VALUES ';
	WHILE i < num DO
		IF i > 1 THEN
			SET @insertSQL = CONCAT(@insertSQL, ',');
		END IF;
		SET @insertSQL = CONCAT(@insertSQL, ' ("', name, '",', UNIX_TIMESTAMP(), ') ') ;
		SET i = i + 1;
	END WHILE;
	PREPARE stmt_name FROM @insertSQL;
	EXECUTE stmt_name;
	DEALLOCATE PREPARE stmt_name;
END;

执行测试一下

CALL insertTestB (1000, 'abc')

执行了几次,第一次执行居然要耗时0.3S。然后后面几次就是0.043S左右

两个对比,其实也快不了什么。也有可能是这个数据表太简单,没有做索引什么的,所以才没差别。

© 著作权归作者所有

Zorn
粉丝 0
博文 4
码字总数 1386
作品 0
深圳
程序员
私信 提问
Oracle + Mybatis实现批量插入、更新和删除示例代码

前言 Mybatis是web工程开发中非常常用的数据持久化的框架,通过该框架,我们非常容易的进行数据库的增删改查。数据库连接进行事务提交的时候,需要耗费的资源比较多,如果需要插入更新的数据...

一看就喷亏的小猿
2018/11/22
307
0
MYSQL体系大纲

1.为什么选用MySQL数据库? 2.MySQL数据库安装和环境配置 3.SQL语句汇总(以MyBatis为例) 3.1.join从句 3.2.when case 3.3.union使用 3.4.in和exists区别 3.5.日期函数 3.6.拼接函数 Oracle除...

微尘鉴
2015/09/20
65
0
MySQL 批量查询 与 单条多次查询

最近两天在做服务的性能测试,为了测试服务的承载能力,需要造很多数据。起初想用存储过程造数据,但是由于涉及到很多关联表,写存储过程比较蛋碎。于是使用Spring + MyBatis + Gradle 以程序...

平江夜弹
2016/04/27
552
0
【高并发简单解决方案】redis队列缓存 + mysql 批量入库 + php离线整合

需求背景:有个,要求存储到mysql中;存储数据高峰能达到日均千万,瓶颈在于。 问题分析 思考:应用网站架构的衍化过程中,应用最新的框架和工具技术固然是最优选择;但是,如果能在,未尝不...

太阳黑子
2016/10/28
149
0
求一个 mysql 批量插入的存储过程

比如有张person表 内有字段 id name sex 现在我有下面三条数据需要插入 1 小明 女 2 小红 男 3 小灰 未知 现求一个能将这些数据批量插入到person表的存储过程,mysql数据哦...

太黑_thj
2016/10/12
403
5

没有更多内容

加载失败,请刷新页面

加载更多

当阿里云工程师回到了家乡......

根据真实故事改编 略有浮夸 但重要的是 9月25日13:30-16:30 云栖大会「5G边缘计算专场」 一定要来哦 !!! 本文作者:樰篱 原文链接 本文为云栖社区原创内容,未经允许不得转载。...

Mr_zebra
27分钟前
7
0
文件操作工具类 FileUtils常用方法

文件操作工具类(FileUtils) 使用该工具类的前提是项目里导入commons-io 包 import org.apache.commons.io.FileUtils; List<String> lines=new ArrayList<String>(); lines.add("欢迎访问:......

AndLong
34分钟前
5
0
maven-shade-plugin

最近,用规则引擎(drools)的封装了一个jar包,给别人使用。用的是maven-assembly-plugin打的包,可以把多个jar包里的class 给打成一个jar,感觉还是满好用的,但是打包成功后,发现报空指针错...

internetafei
39分钟前
5
0
Cassandra repair 工具使用

前言 Cassandra是一款去中心化的分布式数据库。一份数据会分布在多个对等的节点上,即有多个副本。我们需要定期的对多个副本检查,看是否有不一致的情况。比如因为磁盘损坏,可能会导致副本丢...

阿里云官方博客
42分钟前
5
0
element-vue使用富文本编辑器【前端】

一、前言 1.富文本编辑器选择的为vue-quill-editor 官方地址:https://quilljs.com/docs/quickstart/ 2.安装 cnpm install vue-quill-editor cnpm install quill 3.在对应的页面引入,在com...

一代码农码一代
48分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部