MySQL存储过程——批量插入数据

MySQL存储过程——批量插入数据

1.现在建立两个表,并定义两个函数:

dept部门表:
在这里插入图片描述
emp员工表:
在这里插入图片描述
定义随机生成字符串的函数


DELIMITER $$
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 $$

定义随机产生部门编号的函数

DELIMITER $$
	CREATE FUNCTION rand_num() RETURNS INT(5)
	BEGIN
		DECLARE i INT DEFAULT 0;
		SET i=FLOOR(100+RAND()*10);
		RETURN i;
END $$
2.现在创建存储过程:
DELIMITER $$
	CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))
	BEGIN
		DECLARE i INT DEFAULT 0;
		SET autocommit=0;
		REPEAT
	SET i=i+1;
	INSERT INTO emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES((START+i), rand_string(6),'SALESMAN',0001,CURDATE(),2000,400,rand_num());
	UNTIL i=max_num END REPEAT;
	COMMIT;
END $$
DELIMITER $$
	CREATE PROCEDURE insert_dept(IN START INT(10),IN max_num INT(10))
	BEGIN
		DECLARE i INT DEFAULT 0;
		SET autocommit=0;
		REPEAT
	SET i=i+1;
	INSERT INTO dept(deptno,dname,loc) VALUES((START+i), rand_string(10),rand_string(8));
	UNTIL i=max_num END REPEAT;
	COMMIT;
END $$

3.执行存储过程,往dept表添加随机数据
DELIMITER ;
CALL insert_dept(100,10);

查询一下dept表
在这里插入图片描述

DELIMITER ;
CALL insert_emp(100001,10000000);# 插入一千万条数据

由于查询实际会很长很长,我这里就不演示查询了。

发布了31 篇原创文章 · 获赞 78 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43395911/article/details/104398802
今日推荐