【MySQL-存储过程创建测试数据】

今天老大叫我用存储过程创建测试数据,然后我东拼西凑,终于可以用存储过程创建测试数据,第一次发现SQL编程的魅力。以下来描述测试数据创建过程。

一、准备2张表(user表和dept表)

二、准备基础知识

临时变量、局部变量、游标、循环、嵌套循环等使用。请参考我在最后列出的参考文档。

三、准备部门表数据

四、存储引擎编写如下

DELIMITER //
CREATE PROCEDURE mockDataCreate(IN dataCount INT)				-- dataCount各个部门人数
BEGIN
	DECLARE _deptno INT; 		-- 部门ID
	DECLARE done INT;				-- 完成标记
	DECLARE initCount INT;	-- 初始标记
	
	DECLARE dept_cursor CURSOR FOR SELECT id FROM dept;		-- 定义游标
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;	-- 定义记录结束后游标触发操作
	
	SET done = 0;
	SET initCount = 1;
	
	OPEN dept_cursor;				-- 打开游标
	dept_cursor_loop:LOOP		-- 定义循环
		FETCH dept_cursor INTO _deptno;		-- 使用游标获取数据到指定局部变量
		
		IF done = 1 THEN									-- 游标走到末尾,done会自动被设置为1,此时会执行此句
			LEAVE dept_cursor_loop;					-- 跳出循环
		END IF;
		
		data_count_loop:LOOP							-- 每个部门插入人数循环
			IF initCount > dataCount THEN
				LEAVE data_count_loop;
			END IF;
			
			INSERT INTO user(name, deptno) VALUES(CONCAT('用户', initCount), _deptno);
			
			SET initCount = initCount + 1;
		END LOOP;
		
		SET initCount = 1;
	END LOOP;
END //
DELIMITER ;

插入6W数据,执行大概用了100S,感觉很慢。不知道是不是因为每次都进行了SQL的解析、单条插入导致的。

 是不是很香?哈哈,再也不用写Java代码插入数据了,还能创造有关联的数据。

然后,我在执行前,一直担心执行了存储过程,万一终止条件没设置好,导致一直创建数据咋办,于是也百度了有些关于停止MYSQL线程的语句。

show procedure status;                -- 查询所有存储过程状态
show create procedure proc_name;      -- 查询存储过程创建
show create function func_name;       -- 查询函数创建

SHOW PROCESSLIST;                     -- 查询当前运行的MYSQL线程
KILL 线程ID;                          -- 终止ID为此ID的MYSQL线程
DROP PROCEDURE [ IF EXISTS ] <过程名> -- 删除存储过程

参考文档:

mysql存储过程中使用游标的实例

mysql存储过程之游标

mysql 终止 存储过程

MySQL存储过程LOOP循环嵌套的使用说明

存储过程中的变量定义

MySQL中全局变量、会话变量、用户变量和局部变量的区别

mysql查看所有存储过程查询

Mysql存储过程使用随机数

MySQL删除存储过程(DROP PROCEDURE)

猜你喜欢

转载自blog.csdn.net/qq_34291570/article/details/109318406