MySql数据库存储过程的学习(个人理解持续更新)

面试会经常被问到数据库存储过程,所以想要学习以下。
首先,本人半路出家,很多技术确实没有用过。鉴于此,特意询问了n位业界一线的程序员(博主15年毕业,很多同学此时已经是很多公司的高级Java手)。得到的答案出奇的一致:几乎没用过。
综合对比网上信息+n多教程+n多大佬的解答,个人认为:此技术很重要,但对于目前Java编程来说已经用到的很少了!(别抬杠,我说的是很少),真正提高效率的终极办法是使用缓存而不是在数据库中运算。针对这点,很多Java大佬对此并不认同,我也承认这两个本质不是一个东西,但是在提高效率层面而言,缓存确实是更适合的方法,这是毋庸置疑的!而且数据存储过程对于提高效率而言,并不是传说中的那样明显!

**1.比较官方的定义:**存储过程是一组可编程的函数,是为了完成特定功能的SQL语句集,经过第一次编译后再次调用不需要再次编译,创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
优点:
1)效率高:从定义不难看出,不需要再次进行编译,执行效率更高。
2)安全:对于程序员而言,存储过程相当于对表信息进行了封装,程序员的操作只针对于存储过程,看不到表结构和字段。
同时,其相当于数据库的函数,对于参数,不能随便写(自动进行转换,有效避免sql注入)。
3)跨平台:这个说法,没有得到网上信息有力支撑,属于个人理解。因为数据存储过程是在数据库层次的,这样不同开发语言都可以对其进行使用。
缺点:
1)移植性差:这点深有感触,入职的第一家公司,进行过数据库迁移。倒没有用到数据库存储这部分知识,就简单的sql语句很多语法都不一样。存储过程也是类似的,一旦数据迁移,都要进行重写。
2)数据库应该专门进行数据存储,而尽量避免业务逻辑判断。但是存储过程将大量的业务堆积到了数据库,显然是有点违背常理的。
3)扩展性差,集中式最终会被分布式给替代,一般在互联网环境下偏向于使用分布式部署数据库。分布式通俗理解,要分库,拆分表。因为存储过程是依赖于某个具体的库的,如果业务逻辑封装在存储过程中。则不好这样子做。
4)显而易见,这东西与我们的Java代码语法还是有差别的,势必造成编码效率低下,可维护性差的问题。
2.使用场景:
银行业普遍使用存储过程封装业务逻辑:

1)系统的部分或全部数据来自现有数据库,出于安全考虑,只对开发团队提供几条Select SQL(或存储过程)以获取所需数据,具体的表结构不予公开。
2) 开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由存储过程实现。
3) 系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。

以上内容,仅供参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值