比如你需要造一些压测数据,150万条,怎么快速做到呢?

下面使用存储函数和存储过程来批量插入数据。

# 1.创建数据库:
create database bigData;
use bigData;# 2.创建表:
# 部门表
drop table if exists dept;
create table dept(
id int unsigned primary key auto_increment,
deptno mediumint unsigned not null default 0,
dname varchar(20) not null default "",
loc varchar(13) not null default ""
);
# 员工表
drop table if exists emp;
create table emp(
id int unsigned primary key auto_increment,
empno mediumint unsigned not null default 0 comment "编号",
ename varchar(20) not null default "" comment "名字",
job varchar(9) not null default "" comment "工作",
mgr mediumint unsigned not null default 0 comment "上级编号",
hiredate Date not null comment "入职时间",
sal decimal(7,2) not null comment "薪水",
comm decimal(7,2) not null comment "红利",
deptno MEDIUMINT UNSIGNED not null DEFAULT 0 comment "部门编号"
);# 3.创建存储函数用来生成随机字符串和随机号码
/*随机字符生成函数*/
create function rand_string(n int) returns varchar(255)
begin
declare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
declare return_str varchar(255) default '';
declare i int default 0;
while i < n do
set return_str = CONCAT(return_str, SUBSTRING(chars_str, floor(1+RAND()*52),1));
set i = i + 1;
end while;
return return_str;
end;
# drop FUNCTION rand_string;
/*随机号码生成函数*/
create function rand_num()
returns int(5)
begin
declare i int default 0;
set i = floor(100+rand()*10);
return i;
end;
# drop function rand_num;# 4.创建存储过程用来批量插入数据
/*批量插入员工存储过程*/
# drop procedure insert_emp;
create procedure insert_emp(in start_num int(10), in max_num int(10))
begin
declare i int default 0;
# 手动提交
set autocommit = 0;
REPEATset i = i + 1;insert into emp(empno, ename,job,mgr,hiredate,sal,comm,deptno) values((start_num+i), rand_string(6), 'salesman', 1, curdate(), 2000, 400, rand_num());
UNTIL i = max_num END REPEAT;
commit;
end;
/*批量插入部门存储过程*/
# drop procedure if exists insert_dept;
create procedure insert_dept(in start_num int(10), in max_num int(10))
begin
declare i int default 0;
# 手动提交
set autocommit = 0;
REPEATset i = i + 1;insert into dept(deptno, dname, loc) values((start_num+i), rand_string(10), rand_string(8));
UNTIL i = max_num END REPEAT;
commit;
end;# 5.调用存储过程
# 添加30个部门,从101开始
call insert_dept(101, 30);
# 添加150万个员工,从1001开始
call insert_emp(1001, 1500000);

执行了好长时间。

# 5.调用存储过程
# 添加30个部门,从101开始
call insert_dept(101, 30)
> OK
> 时间: 0.073s# 添加150万个员工,从1001开始
call insert_emp(1001, 1500000)
> OK
> 时间: 273.681s

其他(不用关注):

# 返回 0 到 1 的随机数 0.7290583464587651
select rand() from dual;
# 7.411780747037176
select 1+RAND()*52 from dual;
# 返回小于或等于 x 的最大整数 12
select floor(1+RAND()*52) from dual;
# 如果因为必须为存储函数指定一个参数报错,执行一下命令
show variables like 'log_bin_trust_function_creators';
set global log_bin_trust_function_creators=1;

当使用命令行时,语句结束符时;
若不想遇到分号结束,使用下面语句修改:

# 声明语句结束符$$
DELIMITER $$

Mysql 如何批量插入数据相关推荐

  1. php批量数据提交mysql_php在mysql里批量插入数据(代码实例)

    假如说我有这样一个表,我想往这个表里面插入大量数据CREATE TABLE IF NOT EXISTS `user_info` ( `id` int(11) NOT NULL AUTO_INCREME ...

  2. MySQL中批量插入数据

    不管怎么样, 你需要大量的数据, 那么问题来了, 怎么快速地插入呢? 1. 这是我创建的一个批量插入的存储过程- 当然, 你可以把参数去掉, 一次性插入1W, 10W- CREATE DEFINER= ...

  3. MySQL存储过程批量插入数据

    文章目录 1. 怎么写出来的?踩了哪些坑 1.1 新建存储过程的语法 1.2 声明变量 1.3 存储过程参数 1.4 WHILE循环 1.5 写存储过程 1. 怎么写出来的?踩了哪些坑 因为阿里Jav ...

  4. 用shell脚本给mysql插入数据_shell脚本向mysql表批量插入数据

    如何使用shell向mysql数据库表中插入大量测试数据. 用shell脚本通过while循环批量生成mysql测试数据的方法,根据自己的表结构来生成sql语句即可. 代码: 复制代码 代码示例: # ...

  5. oracle批量插入报错,[数据库]Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA

    [数据库]Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA 0 2020-08-19 08:00:06 Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA-009 ...

  6. Mybatis 批量插入数据 关于Oracle 批量插入

    问题:用mybaits 批量插入数据到Oracle 数据库的时候, 报错: ORA-00933: SQL 命令未正确结束 / ORA-00933: SQL command not properly e ...

  7. hive插入多条数据sql_Hive/Impala批量插入数据

    问题描述 现有几千条数据,需要插入到对应的Hive/Impala表中.安排给了一个同事做,但是等了好久,反馈还没有插入完成--看到他的做法是:对每条数据进行处理转换为对应的insert语句,但是,实际 ...

  8. MySQL批量插入数据的几种方法

    最近公司要求测试数据库的性能,就上网查了一些批量插入数据的代码,发现有好几种不同的用法,插入同样数据的耗时也有区别 别的先不说,先上一段代码与君共享 方法一: package com.bigdata; ...

  9. thinkphp mysql批量入库_ThinkPHP3.2框架使用addAll()批量插入数据的方法

    本文实例讲述了ThinkPHP3.2框架使用addAll()批量插入数据的方法.分享给大家供大家参考,具体如下: thinkphp中model类的addAll()方法可以将数据同时添加到数据库中. / ...

最新文章

  1. 阿里二面:如何设计与实现短URL服务?
  2. ArrayList 集合
  3. st7789v tft 驱动电路_OLED显示屏,行驱动电路设计,单片机AT89C51与和显示屏的硬件接线...
  4. 网易试题——关于箭头函数与this和arguments的关系
  5. 云图说|将源端MongoDB业务搬迁至华为云DDS的几种方式
  6. idea安装activiti流程设计器_整合Activiti6.0流程设计器 | 字痕随行
  7. linux mkdir 系统调用,Linux Rootkit 系列四:对于系统调用挂钩方法的补充
  8. Kylin之Caused by :...The table :DWD_ORDER_INFO Dup key found
  9. IE浏览器无法下载文件的解决办法(windows服务器)
  10. frame buffer驱动
  11. 文件属性安全组误删恢复
  12. 奇偶数判断(YZOJ-1032)
  13. Hello World, Hello, 2021
  14. DockerHub上最受欢迎的151个官方镜像,相传掌握第17个可以主宰宇宙!
  15. 纯净Vue模板安装教程
  16. 阿凡达(Avatar)迄今为止最搞笑最靠谱的2个影评
  17. unity中Standard Assets导入错误的解决方法
  18. 2017年第一次专题研讨会论坛成果:自行车和城市可持续发展国际案例
  19. 【3月比赛合集】45场可报名的数据挖掘奖金赛,任君挑选!
  20. 分布式作业调度框架——Elastic-Job

热门文章

  1. 程序员:我用代码给女神 P 图
  2. STM32基于IIC控制E2PROM和io口扩展
  3. (最新整理)国内网页设计网站网址大全
  4. 书本算法重现丨遗传算法:以算例MK01为例
  5. 统信UOS手动更新系统时备份失败,如何用命令自动更新系统
  6. idea没法识别java文件
  7. 纽马克-贝塔法(Newmark-Beta Method)原理
  8. 基于大数据的用户画像构建(理论篇)
  9. vnc远程控制服务器详细步骤~
  10. 电磁炉原理图和单片机C程序源码