[Procedimiento almacenado en MySQL para crear datos de prueba]

Hoy, el jefe me pidió que usara procedimientos almacenados para crear datos de prueba, y luego reconstruí y finalmente pude usar procedimientos almacenados para crear datos de prueba, la primera vez que descubrí el encanto de la programación SQL. A continuación se describe el proceso de creación de datos de prueba.

1. Prepare 2 tablas (tabla de usuario y tabla de departamento)

Dos, preparar conocimientos básicos

Se utilizan variables temporales, variables locales, cursores, bucles, bucles anidados, etc. Consulte los documentos de referencia que enumeré al final.

3. Prepare los datos de la tabla de departamentos

Cuarto, el motor de almacenamiento se escribe de la siguiente manera

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 ;

Al insertar datos de 6W, la ejecución tomó alrededor de 100S, lo que se sintió muy lento. No sé si es causado por el análisis de SQL y la inserción única cada vez.

 ¿Es muy fragante? Jaja, ya no necesitas escribir código Java para insertar datos, también puedes crear datos relacionados.

Luego, antes de la ejecución, siempre estaba preocupado por la ejecución del procedimiento almacenado. ¿Qué debo hacer si la condición de terminación no está establecida y los datos se crean todo el tiempo, por lo que Baidu también tiene algunas declaraciones sobre cómo detener el hilo de 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 ] <过程名> -- 删除存储过程

Documentos de referencia:

Ejemplo de uso del cursor en el procedimiento almacenado de mysql

cursor de procedimiento almacenado mysql

mysql termina el procedimiento almacenado

Instrucciones para usar el anidamiento de bucles de procedimiento almacenado de MySQL

Definición de variable en el procedimiento almacenado

La diferencia entre variables globales, variables de sesión, variables de usuario y variables locales en MySQL

mysql ver todas las consultas de procedimientos almacenados

El procedimiento almacenado de Mysql utiliza números aleatorios

Procedimiento almacenado de eliminación de MySQL (PROCEDIMIENTO DE SOLICITUD)

Supongo que te gusta

Origin blog.csdn.net/qq_34291570/article/details/109318406
Recomendado
Clasificación