[Procédure stockée sur MySQL pour créer des données de test]

Aujourd'hui, le patron m'a demandé d'utiliser des procédures stockées pour créer des données de test, puis j'ai reconstitué, enfin je peux utiliser des procédures stockées pour créer des données de test, la première fois que j'ai découvert le charme de la programmation SQL. Ce qui suit décrit le processus de création des données de test.

1. Préparez 2 tableaux (table utilisateur et table dept)

Deux, préparer les connaissances de base

Des variables temporaires, des variables locales, des curseurs, des boucles, des boucles imbriquées, etc. sont utilisées. Veuillez vous référer aux documents de référence que j'ai énumérés à la fin.

3. Préparez les données de table de service

Quatrièmement, le moteur de stockage s'écrit comme suit

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 ;

En insérant des données de 6W, l'exécution a pris environ 100S, ce qui semblait très lent. Je ne sais pas si cela est causé par une analyse SQL et une insertion unique à chaque fois.

 Est-ce très parfumé? Haha, vous n'avez plus besoin d'écrire du code Java pour insérer des données, vous pouvez également créer des données associées.

Ensuite, avant l'exécution, je m'inquiétais toujours de l'exécution de la procédure stockée. Que dois-je faire si la condition de terminaison n'est pas définie et que les données sont créées tout le temps, Baidu a donc également des instructions sur l'arrêt du thread 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 ] <过程名> -- 删除存储过程

Documents de référence:

Exemple d'utilisation du curseur dans une procédure stockée mysql

curseur de procédure stockée mysql

mysql termine la procédure stockée

Instructions d'utilisation de l'imbrication de boucle de procédure stockée MySQL

Définition de variable dans la procédure stockée

La différence entre les variables globales, les variables de session, les variables utilisateur et les variables locales dans MySQL

mysql affiche toutes les requêtes de procédure stockée

La procédure stockée Mysql utilise des nombres aléatoires

Procédure stockée de suppression MySQL (DROP PROCEDURE)

Je suppose que tu aimes

Origine blog.csdn.net/qq_34291570/article/details/109318406
conseillé
Classement