MySQL通过函数存储过程批量插入数据

目录
  • 数据库 mysql批量插入数据函数存储过程
  • 附:mysql通过函数批量插入数据
  • 总结

数据库 mysql批量插入数据函数存储过程

-- 1 批量插入数据
-- 1.1 创建表
create table `dept` (
`id` int(11) not null auto_increment,
`deptname` varchar(30) default null,
`address` varchar(40) default null,
ceo int null ,
primary key (`id`)
) engine=innodb auto_increment=1 default charset=utf8;

create table `emp` (
`id` int(11) not null auto_increment,
`empno` int not null ,
`name` varchar(20) default null,
`age` int(3) default null,
`deptid` int(11) default null,
primary key (`id`)
#constraint `fk_dept_id` foreign key (`deptid`) references `t_dept` (`id`)
) engine=innodb auto_increment=1 default charset=utf8;


-- 1.2 设置参数
-- 在执行创建函数之前, 首先请保证 log_bin_trust_function_creators 参数为 1, 即 on 开启状态。
-- 否则会报错:
-- 查询: 
show variables like 'log_bin_trust_function_creators';
-- 设置: 
set global log_bin_trust_function_creators=1;

-- 当然, 如上设置只存在于当前操作, 想要永久生效, 需要写入到配置文件中:
-- 在[mysqld]中加上 log_bin_trust_function_creators=1


-- 1.3 编写随机函数
-- 1.3.1 随机产生字符串
delimiter $$
create function rand_string(n int) returns varchar(255)
begin
declare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzabcdefjhijklmnopqrstuvwxyz';
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;

-- 1.3.2 随机产生部门编号
#用于随机产生多少到多少的编号
delimiter $$
create function rand_num (from_num int ,to_num int) returns int(11)
begin
declare i int default 0;
set i = floor(from_num +rand()*(to_num -from_num+1)) ;
return i;
end$$

-- 如果要删除函数: 
drop function rand_num;

-- 1.4 创建存储过程
-- 1.4.1 创建往 emp 表中插入数据的存储过程
delimiter $$
create procedure insert_emp( start int , max_num int )
begin
declare i int default 0;
#set autocommit =0 把 autocommit 设置成 0
set autocommit = 0;
repeat
set i = i + 1;
insert into emp (empno, name ,age ,deptid ) values ((start+i) ,rand_string(6) ,
rand_num(30,50),rand_num(1,10000));
until i = max_num
end repeat;
commit;
end$$

#删除
# delimiter ;
# drop procedure insert_emp;

-- 1.4.2 创建往 dept 表中插入数据的存储过程
#执行存储过程, 往 dept 表添加随机数据
delimiter $$
create procedure `insert_dept`( max_num int )
begin
declare i int default 0;
set autocommit = 0;
repeat
set i = i + 1;
insert into dept ( deptname,address,ceo ) values (rand_string(8),rand_string(10),rand_num(1,500000));
until i = max_num
end repeat;
commit;
end$$

#删除
# delimiter ;
# drop procedure insert_dept;

-- 1.5 调用存储过程
-- 1.5.1 添加数据到部门表
#执行存储过程, 往 dept 表添加 1 万条数据
delimiter ;
call insert_dept(100);

-- 1.5.2 添加数据到员工表
#执行存储过程, 往 emp 表添加 50 万条数据
delimiter ;
call insert_emp(1000,5000);

附:mysql通过函数批量插入数据

右键新建过程,选择完成。编写函数,运行即可。

create definer=`root`@`localhost` procedure `plinsertcom`()
begin
    #routine body goes here...
    declare i int;
    set i=0;
    while i<10000 do 
        insert into commodity(name,price,type_id,count,`describe`) values ('name2',1,1,1,'text');
        set i=i+1;
    end while;
end

总结

到此这篇关于mysql通过函数存储过程批量插入数据的文章就介绍到这了,更多相关mysql批量插入数据内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐