5分钟学会MySQL存储过程_1、定义及应用场景

mysql系列 同时被 2 个专栏收录
11 篇文章 2 订阅
8 篇文章 0 订阅

                                                 存储过程定义及应用场景

 

一、什么是存储过程

       顾名思义,存储过程(Stored Procedure)就是一组为了完成特定功能的SQL语句的集合,经过编译之后存储在数据库

中,用户通过指定存储过程的名字并给定其参数(前提:该存储过程需要参数)来调用执行它。

简单来说,存储过程类似于java中的方法,其也可以实现一些比较复杂的逻辑功能。

 

二、为什么使用存储过程 ?

       为什么使用存储过程,无非就是存储过程的优势有哪些,如下:

              ①、存储过程执行速度快,效率高;

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

                                   存储过程只在第一次执行时进行编译,已经通过语法检查和性能优化,之后的每一次

                            调用执行都不需要重新编译,进而提高效率,而通常使用sql语句进行CURD操作,则需执

                            行一次编译一次,故速度比较慢。

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

              ②、存储过程增强了sql语言的功能和灵活性,可以实现复杂的逻辑功能;

                           - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

                                   存储过程中有输入输出参数,可以声明变量,有if、else、 case、while等控制语句,

                           通过编写存储过程,可以实现复杂的逻辑功能。

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

              ③、存储过程重用性比较高,透明性,数据一致性;

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

                                   存储过程保存在数据库里面所以对任何应用来说都可以使用,新的应用只需要调用相

                           应的存储过程就可以得到相应的数据服务。

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

              ④、存储过程可以减少网络流量;

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

                                   一个需要数百行Transact-SQL代码的操作由一条执行过程代码的单独语句就可实现,

                           而不需要在网络中发送数百行代码。

                           对于同一个针对数据库对象的操作,如果这一操作所涉及到的T-SQL语句被组织成一存储

                           过程,那么当在客户机上调用该存储过程时,网络中传递的只是该调用语句,否则将会是

                           多条SQL语句。从而减轻了网络流量,降低了网络负载。

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

              ⑤、存储过程安全性;

                           - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

                           a、SQL集封装在一个存储过程中,有专门的数据库管理员来统一进行管理,保证安全;

                           b、在网络调用过程时,只有对执行过程的调用是可见的,无法看到表和数据库对象名称,

                                 不能嵌入SQL 语句,有助于避免 SQL 注入攻击;

                           b、权限控制,不同用户不同权限,避免非授权用户对数据的访问,保证数据的安全。                          

                           - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

 

 

三、使用存储过程的劣势 

       俗话说,使用存储过程有优势,肯定就有其劣势,缺点,如下:

              ①、开发局限性;

                           - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

                           a、存储过程的编写比基本的SQL语句复杂,编写存储过程需要更高的技能与经验;     

                           b、SQL本身是一种结构化查询语言,存储过程中,虽然有输入输出参数,也可以声明变量,

                                 也具有有if、else、 case、while等控制语句以及异常处理,但其本质还是面向过程(OP)

                                 的,并不是面向对象(OO)的,面对复杂的业务逻辑,实现还是很困难的。

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

              ②、难以调试与维护不便;

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

                                   存储过程的编写直接依赖于开发人员,如果业务逻辑改动较多,需要频繁直接操作数

                           据库,大量业务降维到数据库,很多异常不能在代码中捕获,出现问题较难排查,需要数

                           据库管理人员的帮助,而且基本上没有较好的调试器,所以调试很困难。

                           调试工具:dbForge Studio for MySQL-不推荐

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

              ③、可移植性差;

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

                                   首先我们的存储过程建立在某一数据库中,只有我们的应用程序绑定其数据库,才可

                           以进行调用,因此使用存储过程将限制应用程序的可移植性。

                         (如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于 RDBMS                                                     的中间层中可能是一个更佳的选择)

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

              ④、没办法应用缓存;

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

                                   没办法应用缓存。虽然有全局临时表之类的方法可以做缓存,但同样加重了数据库的

                           负担。如果缓存并发严重,经常要加锁,那效率实在堪忧。

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

              ⑤、没办法应用缓存无法适应数据库的切割(水平或垂直切割)

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

                                   数据库切割之后,存储过程并不清楚数据存储在哪个数据库中。

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 

 

四、总结

       存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打

折扣。好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编

程的灵活性。 

       普通的项目开发中,不建议大量使用存储过程,对比SQL语句,存储过程适用于业务逻辑复杂,比较耗时,同时请

求量较少的操作,例如后台大批量查询、定期更新等。

       使用场景:

                 1、当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时可以考虑应用存储过程;

                 2、在一个事务的完成需要很复杂的商业逻辑时可以考虑应用存储过程;

                 3、比较复杂的统计和汇总可以考虑应用存储过程。

 

                       

                             Now ~ ~ ~写到这里,就写完了,如果有幸帮助到你,请记得关注我,共同一起见证我们的成长

 

小结

谢谢观赏,我叫猿医生。

猿友推荐:正在奔跑的程序猿

  • 2
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值