在学习或者工作生产环境中,我们经常要对数据库进行压力测试,往数据库中批量插入大量数据,这里我往Mysql中批量插入大量数据,采用存储过程的方法实现。
数据库版本:Mysql5.7

一、建表

1、创建数据库(student)
CREATE DATABASE STUDENT;

2、使用数据库
USE STUDENT;

3、创建学生表(students)
CREATE TABLE students(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
stu_sno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*学号*/
stu_name VARCHAR(20) NOT NULL DEFAULT “”, /*名字*/
stu_age VARCHAR(5) NOT NULL DEFAULT “”, /*年龄*/
stu_date DATE NOT NULL, /*录入日期*/
major VARCHAR(10) NOT NULL DEFAULT “”, /*专业*/
major_sno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*班级编号*/
)ENGINE=INNODB DEFAULT CHARSET=GBK;

4、创建专业表(majors)
CREATE TABLE majors(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
major_sno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
major VARCHAR(20) NOT NULL DEFAULT “”
)ENGINE=INNODB DEFAULT CHARSET=GBK;

这里新建了一个学生表和一个专业表,学生表存放了学生的详细信息,包括学号、姓名、年龄等;专业表包括专业名和班级编号,其中学生表中的班级编号是来自专业表。

二、创建函数

1、创建生成名字的函数rand_name()
DELIMITER $$

CREATE FUNCTION rand_name(n INT) RETURNS VARCHAR(255)
BEGIN
DECLARE char_str VARCHAR(255) DEFAULT ‘李王张刘陈杨赵黄周吴徐孙铭胡朱高林何郭马罗文丰浩豪昊皓上官霸元圆婷洪心粱宋郑谢韩唐冯于董萧程曹袁邓许傅沈曾彭吕苏卢蒋蔡贾丁魏薛叶余潘梓智飞宁非光麟霖凌玲灵杜钟田汪陆金朴成崔悦’;
DECLARE return_str VARCHAR(255) DEFAULT ‘’;
DECLARE i INT DEFAULT 0;
WHILE i<n DO
SET return_str=CONCAT(return_str,SUBSTRING(char_str,FLOOR(1+RAND()*52),1));
SET i=i+1;
END WHILE;
RETURN return_str;
END $$


在mysql中 " ; " 是sql语句结束的标志,但在这里我们要编写函数,因此使用" DELIMITER 符号" 将两个美元符号作为sql语句结束的标志。
这个函数是随机生成姓名的,从预填的汉字中随机抽取指定的汉字的数量进行组合,在日常工作中有个专门的称呼——脱敏,因为这是模拟数据,所以要生成一些模拟名字。

2、创建函数rand_num()
DELIMITER $$

CREATE FUNCTION rand_num() RETURNS INT(5)
BEGIN
DECLARE i INT DEFAULT 0;
SET i=FLOOR(100+RAND()*10);
RETURN i;
END $$

这个函数是随机生成数字的函数,指定数字的初始数目和生成的数字多少。

三、创建存储过程

1、students表存储过程
DELIMITER $$

CREATE PROCEDURE insert_students(IN START INT(10),IN max_num INT(11))
BEGIN
DECLARE i INT DEFAULT 0;
#SET autocommit=0 把autocommit设置成0
SET autocommit=0; #把自动提交关掉
REPEAT #重复/循环
SET i=i+1;
INSERT INTO students(stu_sno,stu_name,stu_age,stu_date,major,major_sno)
VALUES((START+i),rand_name(3),‘20’,NOW(),‘软件工程’,rand_num());
UNTIL i=max_num
END REPEAT;
COMMIT;
END $$

2、创建majors表存储过程
CREATE PROCEDURE insert_majors(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 majors(major_sno,major)
VALUES((START+i),‘软件工程’);
UNTIL i=max_num
END REPEAT;
COMMIT;
END $$

四、测试

1、生成10条专业表数据
DELIMITER ;(这里把sql结束标识符改回来)

CALL insert_majors(100,10);

2、查看结果
SELECT * FROM MAJORS;

3、生成1000w条插入数据
CALL insert_students(00000001,10000000);
意思是学号用00000001开始,一直生成1000w条。

我的笔记本7代i7,实测生成1000w条用时8分54秒。要注意的是存储过程括号的两个数据的含义和数值大小限制。

查看结果:SELECT * FROM STUDENTS;
结果就不展示了,因为Mysql界面跑出1000w条数据需要一段时间,之前测试跑了大概20分钟,图找不着了。

使用sql语句往MySQL插入1000万条数据相关推荐

  1. 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来

    我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...

  2. 插入1000万条数据到mysql数据库表

    转自:https://www.cnblogs.com/fanwencong/p/5765136.html 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入100 ...

  3. 力控数据写入mysQL_绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来...

    我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...

  4. 教你急速快速批量插入1000万条数据到mysql数据库表面试题

    急速快速批量插入1000万条数据到mysql数据库表面试题 教你急速快速批量插入1000万条数据到mysql数据库表&面试题 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好 ...

  5. 4分钟插入1000万条数据到mysql数据库表

    准备工作 我用到的数据库为,mysql数据库8.0版本的,使用的InnoDB存储引 创建测试表 CREATE TABLE `product` (`id` int NOT NULL AUTO_INCRE ...

  6. mysql 插入秒_教你88秒插入1000万条数据到mysql数据库表,IG牛逼

    我用到的数据库为,mysql数据库5.7版本的首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: com ...

  7. java mysql 快速插入1000w条数据_教你88秒插入1000万条数据到mysql数据库表

    我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...

  8. 批量往mysql里面插入1000万条数据_绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来...

    我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...

  9. mysql 1000万数据读取_插入1000万条数据到mysql数据库表

    转自:https://www.cnblogs.com/fanwencong/p/5765136.html 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入100 ...

最新文章

  1. #大学#SQL基础学习笔记(02)
  2. 数据量大了一定要分表,分库分表 Sharding-JDBC 入门与项目实战
  3. assign深拷贝_前端深拷贝和浅拷贝
  4. LeetCode-剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
  5. ssl证书(https) iis 配置安装
  6. Chrome 键盘快捷键(Mac)
  7. 如何处理SAP gateway service使用过程中遇到的400 error - invalid key predicate type for guid
  8. UI设计素材|正确使用浮动按钮
  9. ASP.NET ZERO 学习 JTable的使用
  10. c# thread数线程的创建
  11. 推荐一款专为新手用的Python开发工具
  12. Android TV框架TIF
  13. 地震matlab频域分析,MATLAB在地震数据分析中的应用
  14. 基于51单片机步进电机proteus仿真
  15. http服务(nginx、apache)停用不安全的SSL协议、TLS1.0和TLS1.1协议/启用TLS1.3
  16. 云服务器配置代理服务
  17. vue打开新窗口并且实现传参,有图有真相
  18. latex表格内容上下居中_表格内容垂直居中
  19. 使用mybatis-plus时,报错500
  20. python数据结构之单链表

热门文章

  1. 紫书已经基本学完现在开启紫书题目补完计划!!!
  2. DDS发生器的频率控制字原理和基本结构(二)
  3. 6月9日の勉強レポート
  4. org.hibernate.SessionException: Session was already closed
  5. P4735 最大异或和 01可持久化Trie树模板
  6. 独身主义也不赖:选择不结婚究竟是选择了什么?
  7. 计算机组装兴趣小组考核,中职计算机专业课程学生成绩考核之我见
  8. Android高德地图使用
  9. 引流虚拟主机和服务器,免费虚拟主机能抢到吗
  10. vue 根据字符串生成表单_vue自定义表单生成器,可根据json参数动态生成表单