陕西省建筑信息平台,做网站优化竞价区别,外贸网站建设公司咨询,个人如何做购物网站 关于支付接口今天测试一个数据展示模块#xff0c;依赖于数据部推送数据#xff0c;但是他们没有人员配合#xff0c;为了赶工#xff0c;于是自己徒手造数据#xff0c;有些页面#xff0c;要查看翻页和权限等相关的功能#xff0c;手动造是不可能的#xff0c;因为我懒....哈哈哈…今天测试一个数据展示模块依赖于数据部推送数据但是他们没有人员配合为了赶工于是自己徒手造数据有些页面要查看翻页和权限等相关的功能手动造是不可能的因为我懒....哈哈哈哈于是写了个存储过程分分钟搞定又多了些许的摸鱼时间~ 一、MySQL存储过程简介
MySQL存储过程是一组预定义的SQL语句被存储在数据库中以便可以重复调用和执行。存储过程通常用于将一系列SQL操作封装到单个逻辑单元中以提高代码的重用性、性能和安全性。
二、存储过程的利弊
一存储过程的优点
性能优化 存储过程可以预编译并存储在数据库中提高了查询的执行效率减少了重复的解析和编译操作。代码重用和模块化 存储过程可以将一系列SQL语句封装成可重用的代码块提高了开发效率并减少了代码的冗余。安全性和权限控制 存储过程可以限制对底层表的直接访问只允许通过存储过程进行特定操作从而提高了数据的安全性。简化复杂业务逻辑 存储过程可以在数据库层面上实现复杂的业务规则使应用层面的代码更简洁和可维护。事务管理 存储过程可以用于管理事务确保一系列数据库操作的一致性和完整性。减少网络通信 存储过程的执行在数据库服务器上进行减少了与数据库之间的网络通信次数提高了性能。版本控制和管理 存储过程的更改可以被跟踪和管理有助于维护和更新数据库逻辑。 二存储过程的缺点
复杂性 编写和维护存储过程可能比较复杂特别是对于复杂的业务逻辑可能需要更深入的数据库知识。可移植性 存储过程的语法和实现在不同的数据库管理系统之间可能有差异可能会影响到应用程序的可移植性。难以调试 存储过程的调试可能比较困难特别是在一些数据库系统中没有提供强大的调试工具的情况下。陷阱和性能问题 不当的使用存储过程可能导致性能问题如死锁、性能下降等。可维护性 随着业务逻辑的变化存储过程可能变得复杂和难以维护需要适当的文档和规范。数据库版本升级 在数据库版本升级时存储过程的兼容性可能会成为问题需要仔细测试和调整。 三、适用场景
存储过程在许多情况下都可以发挥重要作用特别是在处理复杂业务逻辑和优化数据库性能方面。以下是一些适用场景可以考虑使用存储过程
复杂业务逻辑 当业务逻辑变得复杂时使用存储过程可以将逻辑集中在数据库中简化应用程序代码并提高代码的可维护性。数据验证和处理 存储过程可以用于执行数据验证、转换和处理确保数据的一致性和完整性。数据转换和清洗 在数据仓库或ETLExtract, Transform, Load过程中存储过程可以用于进行数据转换、清洗和整理。权限控制 存储过程可以用于限制对底层表的直接访问从而实现更精细的权限控制。自动化任务 存储过程可以在特定时间点或特定条件下自动触发执行一系列操作如数据备份、报表生成等。 我们在测试过程中有很多场景用到了存储过程例如
订单处理 在电子商务应用中存储过程可以用于创建、更新和取消订单以及执行库存检查和价格计算等操作。报表生成 存储过程可以用于生成复杂的报表汇总数据并按照指定格式呈现 四、MySQL基本语句格式 DELIMITER $$这是一个特殊的分隔符设置用于告诉 MySQL 在定义存储过程时使用不同于默认分隔符通常为分号的分隔符。这是因为存储过程体内部可能包含多个分号使用不同的分隔符可以避免冲突。CREATE PROCEDURE 数据库名.存储过程名([in变量名 类型,OUT 参数 2...])这是创建存储过程的语句。数据库名.存储过程名是存储过程起的名称存储过程的参数可以包含输入参数IN、输出参数OUT和输入/输出参数INOUT。输入参数IN 代表输入参数默认情况下为in参数表示该参数的值必须由调用程序指定值不会改变。输出参数OUT代表输出参数表示该参数的值经存储过程计算后将out参数的计算结果返回给调用程序。输入/输出参数INOUT 是一种结合了输入和输出功能的参数。它们既可以传递数据给存储过程也可以从存储过程中传递数据给外部。BEGIN这标志着存储过程体的开始。存储过程体是包含实际的 SQL 语句和控制流程语句的代码块。END这标志着存储过程体的结束。DELIMITER ;这是恢复默认分隔符为分号的语句。 在 BEGIN 和 END 之间可以编写一系列的 SQL 语句、控制流程语句如 IF、CASE、LOOP 等以及声明变量和处理异常等这些语句构成了存储过程的具体逻辑。
五、项目实战
好了前面的基础知识科普完了下面我们进入正题跟大家分享下我写的存储过程我用的数据库客户端连接工具是SQLyog~ 一项目需求
简单点就是造数据有一个表bar-day主要用来显示每个代理商下每天每个gid的keep_pc信息一个代理商下有多个gid现在要造的数据就是在三种不同代理商下造多天多个gid的信息用来验证每个代理商下每天展示的gid数据展示是不是正确的。 数据库表结构 我要是手动插入的话造一个月的数据得造到地老天荒于是故事就来了~ 二创建存储过程步骤
以客户端连接工具SQLyog为例
1、创建存储过程
在数据库下找到存储过程鼠标右键创建存储过程 2、命名存储过程 3、创建成功
创建成功后就可以填写对应的SQL语句了在BEGIN和END之间补充. 4、编写SQL存储过程
现在需要造每天的数据思路如下 1传参
所以定义了两个入参一个开始日期一个结束日期例如2023-08-01 2定义并初始化变量
开始时间和keep_pc作为变量并初始化 3while循环
每循环一次开始时间和keep_pc的值1直到开始时间结束时间循环结束。 4编写SQL存储过程
编写好的SQL存储过程如下 语句如下
DELIMITER $$CREATEPROCEDURE cbap.test-bar-day(IN start_date DATE,IN end_date DATE)BEGINDECLARE 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 ; -- 数据1END WHILE;END$$DELIMITER ; 5执行存储过程
SQLyog的用法是在SQL页面鼠标右键执所有查询 执行完成后在左边的存储过程下才会有该文件否则没有。 5、调用存储过程
SQLyog的用法是找到存储过程中用到的表cbap_bar_day右键查询在查询窗口调用语法是call 存储过程名称传参直接执行所有查询即可例如
CALL bar-day(2023-07-01, 2023-07-02); 说明其他的MySQL客户端连接工具可能操作步骤不同思路大同小异。 这样一个存储过程就完成了比起手动一条一条的增加这效率少说增加10倍不过分吧赶紧安排起来给自己多一些摸鱼时间~