MySQL高级篇之批量插入1000W条数据

一、前言

整个操作过程步骤如下:

  • 建表
  • 设置参数log_bin_trust_function_creators
  • 创建函数,保证每条数据都不同
  • 创建存储过程
  • 调用存储过程

二、案例

♦创建t_emp和t_dept两张表

create table t_emp(
	id int UNSIGNED PRIMARY key auto_increment,
	emp_no MEDIUMINT UNSIGNED not null DEFAULT 0,
	emp_name VARCHAR(20) not null DEFAULT "",
	job VARCHAR(20) not null DEFAULT "",
	mgr MEDIUMINT UNSIGNED not null DEFAULT 0,
	hiredate date not null,
	sal DECIMAL(7,2) not null,
	comm DECIMAL(7,2) not null,
	dept_no MEDIUMINT UNSIGNED not null DEFAULT 0
)ENGINE= INNODB DEFAULT CHARSET=UTF8;

create table t_dept(
	id int UNSIGNED PRIMARY key auto_increment,
	dept_no MEDIUMINT UNSIGNED not null DEFAULT 0,
	dept_name VARCHAR(20) not null DEFAULT "",
	dept_level varchar(13) not null DEFAULT ""
)ENGINE= INNODB DEFAULT CHARSET=UTF8;

♦设置参数log_bin_trust_function_creators

set global log_bin_trust_function_creators=1;

♦创建函数,保证每条数据都不同

create function rand_getString(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;

create function rand_num() returns int(5)
	begin
	declare i int default 0;
	set i = floor(100+rand()*10);	
	return i;
end;

♦创建存储过程

create procedure insert_emp(in STRAT int(10), in max_num int(10))
	begin
	declare i int default 0;
	#set autocommit=0把	autocommit设置成0
	set autocommit=0;
	repeat
		set i =i+1;
		insert into t_emp(emp_no,emp_name,job,mgr,hiredate,sal,comm,dept_no) 
		values((STRAT+i),rand_getString(6),'SALESMAN',0001,CURDATE(),2000,400,rand_num());
		until i = max_num
	end repeat;
	commit;
end;

create procedure insert_dept(in STRAT int(10), in max_num int(10))
	begin
	declare i int default 0;
	#set autocommit=0把	autocommit设置成0
	set autocommit=0;
	repeat
		set i =i+1;
		insert into t_dept(dept_no,dept_name,dept_level) 
		values((STRAT+i),rand_getString(10),rand_getString(8));
		until i = max_num
	end repeat;
	commit;
end;

♦调用存储过程

#先执行插入部门数据的存储过程
call insert_dept(100,10);
#再执行插入员工数据的存储过程
call insert_emp(10001,5000000);

♦这里我们只插入了500W条数据,大概15分左右的样子,执行完毕后,查询一下

MySQL高级篇之批量插入1000W条数据的照片 - 1

MySQL高级篇之批量插入1000W条数据的照片 - 3

至此,我们关于MySQL高级篇之批量插入1000W条数据相关介绍完毕。
博客地址:http://www.marsitman.com/mysql/mysql-create-bigdata.html
版权声明:本文为博主原创文章,允许转载,但转载必须标明出处。

 

 

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!



点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注