当前位置:网站首页>mysql插入百万数据(使用函数和存储过程)
mysql插入百万数据(使用函数和存储过程)
2022-07-29 05:20:00 【麻辣隔壁4】
案例:利用存储过程向mysql插入百万条数据。
一、新建俩张表:dept,emp表:
1、建立dept表:
CREATE TABLE `dept` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`deptno` mediumint unsigned NOT NULL DEFAULT '0',
`dname` varchar(20) NOT NULL DEFAULT '',
`loc` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=gbk;
2、建立emp表:
CREATE TABLE `emp` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`empno` mediumint unsigned NOT NULL DEFAULT '0',
`empname` varchar(20) NOT NULL DEFAULT '',
`job` varchar(20) NOT NULL DEFAULT '',
`sal` decimal(7,2) DEFAULT NULL,
`deptno` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=500001 DEFAULT CHARSET=gbk;
二、建立函数和存储过程,需要建立以下函数:
1、建立rand_str()函数。此函数产生随机字符串:
CREATE DEFINER=`root`@`%` FUNCTION `rand_str`(n int) RETURNS varchar(255) CHARSET utf8mb4
BEGIN
DECLARE
chars_str VARCHAR ( 100 ) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
DECLARE
returns_str VARCHAR ( 255 ) DEFAULT '';
DECLARE
i INT DEFAULT 0;
WHILE
i < n DO
SET returns_str = CONCAT(returns_str,SUBSTRING( chars_str, FLOOR( 1+ RAND( ) * 52 ) , 1));
SET i = i + 1;
END WHILE;
RETURN returns_str;
END
2、建立随机数函数:rand_num():
CREATE DEFINER=`root`@`%` FUNCTION `rand_num`( ) RETURNS int
BEGIN
DECLARE
i INT DEFAULT 0;
SET i = FLOOR( 100+ RAND( ) * 10 );
RETURN i;
END
3、建立存储过程:insert_dept:插入dept表的存储过程:
CREATE DEFINER=`root`@`%` PROCEDURE `insert_dept`( IN START INT ( 10 ), IN max_num INT ( 10 ) )
BEGIN
DECLARE i INT DEFAULT 0;
SET autocommit = 0;
REPEAT
SET i = i + 1;
INSERT into dept ( deptno, dname,loc )VALUES((START + i), rand_str(10),rand_str(6));
UNTIL i = max_num
END REPEAT;
COMMIT; END
4、建立存储过程insert_tmp:插入emp表的存储过程:
CREATE DEFINER=`root`@`%` PROCEDURE `insert_tmp`( IN START INT ( 10 ), IN max_num INT ( 10 ) )
BEGIN
DECLARE i INT DEFAULT 0;
SET autocommit = 0;
REPEAT
SET i = i + 1;
INSERT into emp ( empno, empname,sal,deptno )VALUES((START + i), rand_str(6),100,rand_num());
UNTIL i = max_num
END REPEAT;
COMMIT; END
三:进行测试:
1、先测试插入dept:
CALL insert_dept(1, 10);
结果如下:
由此看出,是成功的进行了插入。
接着我们对emp进行上百万条数据插入,看看需要花多长时间。
CALL insert_tmp(1000000, 5000000)
结果为:
由此可看到,插入50W条数据需要4分钟左右。感觉比较慢
边栏推荐
- Under the bear market of encrypted assets, platofarm's strategy can still obtain stable income
- Dao race track is booming. What are the advantages of m-dao?
- "Shandong University mobile Internet development technology teaching website construction" project training log I
- Idea using JDBC to connect mysql database personal detailed tutorial
- 手撕ORM 框架(泛型+注解+反射)
- “山东大学移动互联网开发技术教学网站建设”项目实训日志二
- 30 knowledge points that must be mastered in quantitative development [what is level-2 data]
- Thinkphp6 pipeline mode pipeline use
- Read and understand move2earn project - move
- 识变!应变!求变!
猜你喜欢
Reporting Services- Web Service
File permissions of day02 operation
Okaleido Tiger 7.27日登录Binance NFT,首轮已获不俗成绩
D3.JS 纵向关系图(加箭头,连接线文字描述)
Most PHP programmers don't understand how to deploy safe code
Plato Farm有望通过Elephant Swap,进一步向外拓展生态
C# 判断用户是手机访问还是电脑访问
“山东大学移动互联网开发技术教学网站建设”项目实训日志七
Huawei 2020 school recruitment written test programming questions read this article is enough (Part 1)
深度学习的趣味app简单优化(适合新手)
随机推荐
全闪分布式,如何深度性能POC?
与张小姐的春夏秋冬(5)
From starfish OS' continued deflationary consumption of SFO, the value of SFO in the long run
以‘智’提‘质|金融影像平台解决方案
量化开发必掌握的30个知识点【什么是分笔逐笔数据】?
【go】defer的使用
北京宝德&TaoCloud共建信创之路
“山东大学移动互联网开发技术教学网站建设”项目实训日志五
识变!应变!求变!
MOVE PROTOCOL全球健康宣言,将健康运动进行到底
极致通缩和永动机模型,将推动 PlatoFarm 爆发
微信内置浏览器禁止缓存的问题
Use of file upload (2) -- upload to Alibaba cloud OSS file server
iSCSI vs iSER vs NVMe-TCP vs NVMe-RDMA
Detailed steps of JDBC connection to database
如何零代码制作深度学习的趣味app(适合新手)
麦当娜“Hellbent”购买130万美元的nft无聊猿,现在被认为太贵了
Okaleido tiger logged into binance NFT on July 27, and has achieved good results in the first round
Idea using JDBC to connect mysql database personal detailed tutorial
Print out all prime numbers between 1-100