目录
- 数据库 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!