[テストデータを作成するためのMySQLに保存されたプロシージャ]

今日、上司から、ストアドプロシージャを使用してテストデータを作成するように依頼されました。その後、私は、SQLプログラミングの魅力を初めて発見したときに、ストアドプロシージャを使用してテストデータを作成できるようになりました。以下に、テストデータの作成プロセスについて説明します。

1. 2つのテーブル(ユーザーテーブルと部門テーブル)を準備します

二、基本的な知識を準備する

一時変数、ローカル変数、カーソル、ループ、ネストされたループなどが使用されます。最後に記載した参考資料をご参照ください。

3.部門テーブルデータを準備します

第四に、ストレージエンジンは次のように書かれています

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の解析と1回の挿入が原因かどうかはわかりません。

 とても香りがよいですか?ハハ、データを挿入するためにJavaコードを書く必要はなくなり、関連データを作成することもできます。

そして、実行前は常にストアドプロシージャの実行が心配でしたが、終了条件が設定されておらず、常にデータが作成されている場合はどうすればよいのでしょうか。

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ストアドプロシージャループのネストを使用するための手順

ストアドプロシージャの変数定義

MySQLのグローバル変数、セッション変数、ユーザー変数、ローカル変数の違い

mysqlはすべてのストアドプロシージャクエリを表示します

Mysqlストアドプロシージャはランダムな数値を使用します

MySQLの保存されたプロシージャの削除(DROP PROCEDURE)

おすすめ

転載: blog.csdn.net/qq_34291570/article/details/109318406