今天测试一个数据展示模块,依赖于数据部推送数据,但是他们没有人员配合,为了赶工,于是自己徒手造数据,有些页面,要查看翻页和权限等相关的功能,手动造是不可能的,因为我懒....哈哈哈哈,于是写了个存储过程,分分钟搞定,又多了些许的摸鱼时间~
MySQL存储过程是一组预定义的SQL语句,被存储在数据库中,以便可以重复调用和执行。存储过程通常用于将一系列SQL操作封装到单个逻辑单元中,以提高代码的重用性、性能和安全性。
存储过程在许多情况下都可以发挥重要作用,特别是在处理复杂业务逻辑和优化数据库性能方面。以下是一些适用场景,可以考虑使用存储过程:
我们在测试过程中,有很多场景用到了存储过程,例如:
在 BEGIN 和 END 之间,可以编写一系列的 SQL 语句、控制流程语句(如 IF、CASE、LOOP 等),以及声明变量和处理异常等,这些语句构成了存储过程的具体逻辑。
好了,前面的基础知识科普完了,下面我们进入正题,跟大家分享下我写的存储过程,我用的数据库客户端连接工具是SQLyog~
简单点,就是造数据,有一个表bar-day,主要用来显示每个代理商下每天每个gid的keep_pc信息,一个代理商下有多个gid,现在要造的数据就是在三种不同代理商下,造多天多个gid的信息,用来验证每个代理商下每天展示的gid数据展示是不是正确的。
数据库表结构:
我要是手动插入的话,造一个月的数据,得造到地老天荒,于是故事就来了~
以客户端连接工具SQLyog为例:
在数据库下找到存储过程,鼠标右键,创建存储过程
创建成功后,就可以填写对应的SQL语句了,在BEGIN和END之间补充.
现在需要造每天的数据,思路如下:
所以定义了两个入参,一个开始日期,一个结束日期,例如:2023-08-01
开始时间和keep_pc作为变量,并初始化
每循环一次,开始时间和keep_pc的值+1,直到开始时间=结束时间,循环结束。
编写好的SQL存储过程如下:
语句如下:
DELIMITER $$
CREATE
PROCEDURE `cbap`.`test-bar-day`(IN start_date DATE,IN end_date DATE)
BEGIN
DECLARE current_date1 DATE; -- 当前日期
DECLARE keep_pc INT;
SET current_date1 = start_date;-- 初始化变量的值
SET keep_pc = 60;
WHILE current_date1<= end_date DO-- while循环
INSERT INTO `cbap`.`cbap_bar_day` (`dtime`, `gid`, `bar_name`, `agent_id`, `agent_name`
, `keep_pc`)
VALUES (current_date1, '1010001', '测试吧01', '562501', '小张'
, keep_pc);
SET current_date1 = ADDDATE(current_date1, 1);-- 日期+1天
SET keep_pc = keep_pc +1 ; -- 数据+1
END WHILE;
END$$
DELIMITER ;
SQLyog的用法是,在SQL页面,鼠标右键,执所有查询
执行完成后,在左边的存储过程下才会有该文件,否则没有。
SQLyog的用法是,找到存储过程中用到的表cbap_bar_day,右键查询,在查询窗口,调用语法是:call 存储过程名称(传参),直接执行所有查询即可,例如:
CALL `bar-day`('2023-07-01', '2023-07-02');
说明:其他的MySQL客户端连接工具,可能操作步骤不同,思路大同小异。
这样,一个存储过程就完成了,比起手动一条一条的增加,这效率少说增加10倍不过分吧,赶紧安排起来,给自己多一些摸鱼时间~