SQL 必知必会
陈旸
清华大学计算机博士
73337 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
第一章:SQL语法基础篇 (19讲)
SQL 必知必会
15
15
1.0x
00:00/00:00
登录|注册

13丨什么是存储过程,在实际项目中用得多么?

掌握存储过程是必备技能
存储过程的方便性和局限性
存储过程的优缺点导致不同公司对其使用的态度不同
不适合高并发场景
版本管理困难
调试困难
可移植性差
减少网络传输量
强安全性
减少开发工作量
一次编译多次使用
WHILE...DO...END WHILE
REPEAT...UNTIL...END REPEAT
LOOP、LEAVE和ITERATE
CASE
IF...THEN...ENDIF
SELECT...INTO
SET
DECLARE
BEGIN...END
参数类型:IN、OUT、INOUT
累加运算示例
BEGIN和END定义执行语句块
参数列表
使用CREATE PROCEDURE
类似于函数
SQL语句的封装
总结
公司对存储过程的态度差异
缺点
优点
流控制语句
存储过程示例
创建存储过程
存储过程的概念
存储过程的争议
什么是存储过程

该思维导图由 AI 生成,仅供参考

上一节我介绍了视图,它是 SQL 中的一个重要应用,使用视图对 SQL 查询进行封装,可以让 SQL 的代码结构更清晰,让用户权限管理更安全。
今天我来讲一下 SQL 的存储过程,它是 SQL 中另一个重要应用,和视图一样,都是对 SQL 代码进行封装,可以反复利用。它和视图有着同样的优点,清晰、安全,还可以减少网络传输量。不过它和视图不同,视图是虚拟表,通常不对底层数据表直接操作,而存储过程是程序化的 SQL,可以直接操作底层数据表,相比于面向集合的操作方式,能够实现一些更复杂的数据处理。存储过程可以说是由 SQL 语句和流控制语句构成的语句集合,它和我们之前学到的函数一样,可以接收输入参数,也可以返回输出参数给调用者,返回计算结果。
今天有关存储过程的内容,你将重点掌握以下几个部分:
什么是存储过程,如何创建一个存储过程?
流控制语句都有哪些,如何使用它们?
各大公司是如何看待存储过程的?在实际工作中,我们该如何使用存储过程?

什么是存储过程,如何创建一个存储过程

存储过程的英文是 Stored Procedure。它的思想很简单,就是 SQL 语句的封装。一旦存储过程被创建出来,使用它就像使用函数一样简单,我们直接通过调用存储过程名即可。我在前面讲过,存储过程实际上由 SQL 语句和流控制语句共同组成。流控制语句都有哪些呢?这个我稍后讲解。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

存储过程在SQL中扮演着重要的角色,类似于函数,能够封装SQL代码,实现反复利用。与视图相似,存储过程具有清晰、安全、减少网络传输量等优点,但不同于视图的虚拟表,存储过程是程序化的SQL,可以直接操作底层数据表,实现更复杂的数据处理。存储过程由SQL语句和流控制语句构成,可以接收输入参数,返回输出参数和计算结果。尽管存储过程有诸多优点,但其使用也存在争议。一些公司要求大型项目使用存储过程,因为它可以提升SQL执行效率、减少开发工作量、增强安全性、减少网络传输量。然而,存储过程的可移植性差、调试困难、版本管理困难、不适合高并发场景等缺点也是明显的。尽管不同公司对存储过程的态度不一,但对于开发人员来说,掌握存储过程是必备的技能之一。文章还提供了一个针对王者荣耀英雄数据表的存储过程练习,帮助读者更好地理解存储过程的应用。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《SQL 必知必会》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(81)

  • 最新
  • 精选
  • 半瓶醋
    注意:CREATE PROCEDURE `get_sum_score`这里不是单引号,是` `号哦~ # 编写存储过程get_sum_score,用来得到某一类型英雄的最大生命值的总和 CREATE PROCEDURE `get_sum_score`( OUT sum_max_hp FLOAT, IN s VARCHAR(255) ) BEGIN SELECT sum(hp_max) FROM heros WHERE role_main = s INTO sum_max_hp; END # 调用存储过程 CALL get_sum_score(@sum_max_hp,'战士') SELECT @sum_max_hp;

    作者回复: Good Job 对的 不是单引号

    2019-10-25
    6
    14
  • 毛豆
    存储过程很重要,可不可以详细讲讲

    作者回复: 可以 考虑在进阶篇加一篇关于存储过程的使用。这个在工作中还比较常用

    2019-07-12
    3
    14
  • 番茄
    请教下老师或者各位小伙伴,调用程序这里,直接call就出结果了,下面那句select为什么要加上呢 CALL get_hero_scores(@max_max_hp, @min_max_mp, @avg_max_attack, '战士'); SELECT @max_max_hp, @min_max_mp, @avg_max_attack;

    作者回复: CALL get_hero_scores(@max_max_hp, @min_max_mp, @avg_max_attack, '战士'); 这里是把结果放到max_max_hp, min_max_mp, avg_max_attack 这三个变量中进行返回,如果要显示出来结果,可以使用:SELECT @max_max_hp, @min_max_mp, @avg_max_attack;

    2019-11-26
    11
  • 高志强
    终于明白了啥是存储过程,谢谢老师~

    作者回复: 加油志强

    2019-11-01
    6
  • Monday
    老师的脑图总结得很到位,求共享啊。谢谢

    作者回复: 感谢 我放到GitHub上了,可以看下

    2019-08-07
    3
    4
  • Elliot
    极课时间页面的交互要是能像Medium那样就更完美了,比如可以自己mark一些书签标记

    作者回复: 多谢反馈

    2019-07-21
    2
    2
  • 我行我素
    CREATE PROCEDURE `get_sum_score`( OUT sum_hp_max FLOAT, s VARCHAR(255) ) BEGIN SELECT sum(hp_max) FROM heros WHERE role_main = s INTO sum_hp_max; END CALL get_sum_score(@sum_hp_max, '法师'); SELECT @sum_hp_max;

    作者回复: Good Job

    2019-07-10
    2
  • 丁丁历险记
    就是个毒瘤,慎用

    作者回复: 对 根据业务情况选择把,有些公司不用,也有一些公司在使用

    2019-11-14
    5
    1
  • Coool
    CREATE PROCEDURE `get_sum_score`(out sum_max_hp float,in s varchar(255)) BEGIN select sum(hp_max) from heros where role_main=s into sum_max_hp; END call get_sum_score(@sum_max_hp,'战士') ; select @sum_max_hp ;

    作者回复: Good Job

    2019-10-22
  • 未来的胡先森
    交作业了 DELIMITER // CREATE PROCEDURE get_sum_score( OUT sum_max_hp FLOAT, t VARCHAR(255)) BEGIN SELECT SUM(hp_max) FROM heros WHERE role_main=t INTO sum_max_hp; END // DELIMITER ; CALL get_sum_score(@sum_max_hp,'战士'); SELECT @sum_max_hp;

    作者回复: Good Job

    2019-08-08
收起评论
显示
设置
留言
81
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部