MySQL基础 - 存储过程和存储函数
区别: 1. 存储过程一旦创建就想函数一样可以调用,但是函数一定有返回值,存储过程可以有可以没有。
2. 存储过程和视图有着相似的有点,安全,减少网络传输量,但是视图只能查不能增/删/改,存储过程可以实现更复杂的数据处理,定义变量、游标等。
存储过程
概念:一组经过预编译的SQL语句封装。
执行过程:预存储MySQL服务器,需要执行的时候客户端向服务端发出调用命令,服务端可以把预编译并存储好的一系列SQL语句全部执行。
优点: 1.具备重用性,减少程序员的开发压力。
2.减少网络传输量:客户端不需要通过网络传输所有的SQL语句给服务器
3.封装批量SQL的具体实现,提高查询的安全性。
缺点: 1. 可移植性差。不能跨数据库移植,不同数据库需要重新编写。
2. 调试困难。 少数RDMS支持过程调试,但对于复杂过程,开发和调试都不容易,虽有第三方调试工具,但是收费。
3. 版本管理困难。当过程中的表索引发生变化,可能会导致过程失效,软件开发往往需要版本迭代,但是存储过程无版本控制,版本迭代很麻烦。
4. 不适合高并发场景。高并发场景需要减少数据库压力,在数据库分库分表,且要求可扩展性高,此场景下存储过程就变得难以维护,增加了数据库压力。
基于以上情况,微软、IBM等公司要去大型公司使用存储过程,而阿里则是不推荐使用存储过程。
创建语法:
1 #参数类型:IN|OUT|INOUT ,不写默认IN 2 #参数数据类型INT VARCHAR... 3 create procedure 存储过程名(参数类型 参数名 参数数据类型) 4 # 局部变量定义 declare a varchar(10) default ''; 5 begin 6 #存储过程体 7 #变量赋值SET a = 'abc' 8 end
补充内容:存储过程中的变量为局部变量,若在sql中定义全局变量用@a='abc'
调用存储过程:call 存储过程名(实参1,实参2...)
存储函数
函数作用:可以实现更负责的逻辑操作,提高用户对数据库的管理效率。
创建语法
1 create function 函数名(参数名 参数数据类型,...) 2 returns 返回值类型 3 begin 4 函数体 #必须包含return语句 5 end
语法上与存储过程的差异
1. procedure -> function
2. 参数列表不需要定义参数IN|OUT|INOUT类型
3. 多了 returns 和 return
4. 调用语法:select 函数名(传参)
关键字 | 参数列表 | 调用语法 | 查询语法 | 返回值 | 查询语句中使用 | 应用场景 | |
存储过程 | PROCEDURE | IN|OUT|INOUT | CALL | SHOW CREATE PROCEDURE 名 | 0~N | 不可以,过程能够操作表(建表/删表)和事务操作 | 一般用于更新 |
存储函数 | FUNCTION/RETURNS/RETURN | 无IN|OUT|INOUT | SELECT | SHOW CREATE FUNCTION 名 | 1 | 可以,存储过程不能操作表和事务 | 一般用于查询并返回值 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)