mysql的存储过程是怎么实现的?作用是什么?

  • MySQL 从 5.0 版本开始支持存储过程和函数
  • 但是平时用的比较少,想知道其实现原理和使用场景
-- 创建存储过程
DELIMITER $$
CREATE PROCEDURE testa()
BEGIN
    SELECT * FROM student WHERE id=2;
END $$

-- 调用存储过程
call testa();
阅读 11.7k
2 个回答

先拿一个JAVA项目做个对比,不知道恰不恰当

XX项目mysql项目
java语言sql语言
内置函数:List.of("a", "b", "c", "d");内置:count()
自定义函数:ListUtil.ofStr('a,b,c')自定义函数:select splitStr('a,b,c')...
自定义服务方法:service.parkingFee()自定义存储过程:call parkingFee()..

基于表格,所以存储过程和函数的使用场景:

  1. 内置函数满足不了你的需求的时候,你可以来个自定义函数,因为SQL里直接可以用
  2. 函数在一般语言中,都遵循单一职责,所以不适合太复杂的业务逻辑,如我上面的举例,更适合解决一个单一的问题,让开发更高效
  3. 存储过程责比较适合封装一个完整的业务逻辑,如我上面的例子停车计费

至于函数和存储过程的缺点和为啥使用人少,我能想到的几个点罗列下

  1. 不方便维护,比如现在都用版本管理了,这个代码更新迭代是个问题
  2. 函数封装在数据库里,换了数据库,大概率要重写
  3. 数据库有分库分表,甚至分布式部署,存储过程实现完整业务逻辑难度巨大,基本不用考虑了
已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

存储过程适应不了产品需求一天三变的频率

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏