Mysql 如何批量插入数据
比如你需要造一些压测数据,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 如何批量插入数据相关推荐
- php批量数据提交mysql_php在mysql里批量插入数据(代码实例)
假如说我有这样一个表,我想往这个表里面插入大量数据CREATE TABLE IF NOT EXISTS `user_info` ( `id` int(11) NOT NULL AUTO_INCREME ...
- MySQL中批量插入数据
不管怎么样, 你需要大量的数据, 那么问题来了, 怎么快速地插入呢? 1. 这是我创建的一个批量插入的存储过程- 当然, 你可以把参数去掉, 一次性插入1W, 10W- CREATE DEFINER= ...
- MySQL存储过程批量插入数据
文章目录 1. 怎么写出来的?踩了哪些坑 1.1 新建存储过程的语法 1.2 声明变量 1.3 存储过程参数 1.4 WHILE循环 1.5 写存储过程 1. 怎么写出来的?踩了哪些坑 因为阿里Jav ...
- 用shell脚本给mysql插入数据_shell脚本向mysql表批量插入数据
如何使用shell向mysql数据库表中插入大量测试数据. 用shell脚本通过while循环批量生成mysql测试数据的方法,根据自己的表结构来生成sql语句即可. 代码: 复制代码 代码示例: # ...
- oracle批量插入报错,[数据库]Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA
[数据库]Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA 0 2020-08-19 08:00:06 Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA-009 ...
- Mybatis 批量插入数据 关于Oracle 批量插入
问题:用mybaits 批量插入数据到Oracle 数据库的时候, 报错: ORA-00933: SQL 命令未正确结束 / ORA-00933: SQL command not properly e ...
- hive插入多条数据sql_Hive/Impala批量插入数据
问题描述 现有几千条数据,需要插入到对应的Hive/Impala表中.安排给了一个同事做,但是等了好久,反馈还没有插入完成--看到他的做法是:对每条数据进行处理转换为对应的insert语句,但是,实际 ...
- MySQL批量插入数据的几种方法
最近公司要求测试数据库的性能,就上网查了一些批量插入数据的代码,发现有好几种不同的用法,插入同样数据的耗时也有区别 别的先不说,先上一段代码与君共享 方法一: package com.bigdata; ...
- thinkphp mysql批量入库_ThinkPHP3.2框架使用addAll()批量插入数据的方法
本文实例讲述了ThinkPHP3.2框架使用addAll()批量插入数据的方法.分享给大家供大家参考,具体如下: thinkphp中model类的addAll()方法可以将数据同时添加到数据库中. / ...
最新文章
- python免费自学爬虫_这套Python爬虫学习教程,不到一天即可新手到进阶!免费领...
- python字符串find函数-python字符串查找函数的用法详解
- 五十五、手把手教你从零到一,完成淘宝数据分析案例
- Spring的异步方法
- 从码奴到码神之路--初级到中级再到高级程序员的进化之路
- 主流大数据平台及解决方案对比
- 算法基础部分3-动态规划
- 并发编程-基础概念介绍
- Java网络编程学习汇总
- Fiddler自动回复器伪造回复
- 程序员要知道的英语词汇
- ASML大举向中国出口光刻机,或在于忧虑中国光刻机技术取得突破
- 天梯赛PTA-7-17 约瑟夫环
- Object.assign()方法
- 在JSRUN写一段王者荣耀段位代码
- android 10.0 预制不可卸载app(RK 展讯 MTK平台都适用)
- 折腾StatusNet(原laconica),搭建个人微博平台
- 2018中科大计算机考研心得
- 电脑软件:UPDF - 高效率高颜值的PDF编辑器
- IJCAI18 阿里妈妈广告
热门文章
- Learning Adobe Animate CC 学习Adobe Animate CC Lynda课程中文字幕
- win10禁用驱动程序强制签名_Win10驱动程序强制签名的禁用教程
- Ubuntu 查看硬件信息方法
- (转)理解CPU steal time
- tcp服务器虚拟ip,TCPSocket到虚拟机的IP地址
- 4行Python代码打败美图秀秀
- 关系代数:σ π × ÷ ∪ ∩ − ⋈(⟗ ⟕ ⟖)
- 中金所杯可以用计算机,“中金所杯”让大学生正确认识金融期货重要作用
- docker中镜像源推荐
- FFMPEG编译裁剪移植