前文
本文提供mysql存储过程mock数据的方式,主要实现循环n次执行sql的mock数据操作
知识点
# 删除存储过程
drop procedure if exists mock_r_id; # 如果存储过程mock_r_id存在则删除
# 创建存储过程
CREATE PROCEDURE mock_r_id ( r_id INT, n INT )
BEGIN
DECLARE i INT DEFAULT 0; # 定义变量i 默认 0
# ……语句
END
# 调用存储过程
call mock_r_id(5027,100000);
# 定义语句存储过程将以$$ 替代; 作为sql运行分割符
DELIMITER $$
END $$ # 此处相当于结束
# 重复执行
DECLARE
i INT DEFAULT 0;
REPEAT
SET i = i + 1;
# ……语句
UNTIL i = n # 知道i = n 跳出循环
END REPEAT;
# 设置事务不自动提交
SET autocommit = 0;
COMMIT; # 手动提交事务
# 设置事务自动提交
SET autocommit = 1;
# 字符串拼接函数
concat(r_id,"redeem",i)
存储过程
功能为循环创建n条数据
-- 清除同名存储过程
drop procedure if exists mock_r_id;
DELIMITER $$
-- 创建存储过程
CREATE PROCEDURE mock_r_id ( r_id INT, n INT )
BEGIN
DECLARE i INT DEFAULT 0;
SET autocommit = 0;
-- 循环mock数据
REPEAT
SET i = i + 1;
INSERT INTO `basic_redeem_code_detail` ( `r_id`,`redeem_code`, `status` )
VALUES ( r_id, concat(r_id,"redeem",i), 0 );
UNTIL i = n
END REPEAT;
-- 提交mock数据
COMMIT;
SET autocommit = 1;
END
$$
-- 调用mock函数
call mock_r_id(5027,100000);
call mock_r_id(5028,100000);
call mock_r_id(5029,100000);
call mock_r_id(5030,100000);
call mock_r_id(5031,100000);
call mock_r_id(5032,100000);
call mock_r_id(5033,100000);
call mock_r_id(5034,100000);
call mock_r_id(5035,100000);
call mock_r_id(5036,100000);
call mock_r_id(5056,100000);
call mock_r_id(5057,100000);
call mock_r_id(5058,100000);
模版
-- 清除同名存储过程
drop procedure if exists funcxxxx;
DELIMITER $$
-- 创建存储过程
CREATE PROCEDURE funcxxxx (n INT )
BEGIN
DECLARE i INT DEFAULT 0;
SET autocommit = 0;
-- 循环mock数据
REPEAT
SET i = i + 1;
# repeat sql
UNTIL i = n
END REPEAT;
-- 提交mock数据
COMMIT;
SET autocommit = 1;
END
$$
-- 调用mock函数
call funcxxxx(100000); # 重复调用10万次sql