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 可以,存储过程不能操作表和事务 一般用于查询并返回值

posted on 2022-01-10 18:24  挣扎的发际线  阅读(92)  评论(0编辑  收藏  举报

导航