MySql中函数与存储区别

函数与存储过程的区别:
1、函数有且只有一个返回值,而存储过程不能有返回值。
2、函数只有输入参数,而存储过程可以有in,out,inout多个类型参数
3、存储过程中的语句功能丰富,实现更复杂的业务逻辑,而函数中国通常不会使用inser4、update,delete等语句,这是完成查询的工作,受输入参数并返回一个结果,功能针对性比较强
5、存储过程一般是作为一个独立的部分来执行(call调用)。而函数可以作为查询语句的一个部分来调用

创建函数

在这里插入图片描述

  • . delimiter自定义符号是为了在函数内些语句方便,制定除了;之外的符号作为函数书写结束标志,一般用$$或者//

  • ·形参列表:形参名类型类型为mysql支持类型·返回类型:函数返回的数据类型,

  • mysql支持类型即可·函数体:若干sql语句组成,如果只有一条语句也可以不写delimiter和begin, end .

  • return:返回指定类型返回值

举个例子: create function st1() returns int begin insert into cls values (2, ’ oy ',11 ’ m ,7); set @a=(select age from cls where id=1); return @a; end$$

创建存储过程

在这里插入图片描述

  • . delimiter自定义符号是为了在函数内些语句方便,制定除了;之外的符号作为函数书写结束标志
  • ·形参列表:[ IN | ouT | INOUT ]形参名类型
    in输入,out输出,inout可以输入也可以输出
  • ·存储过程:若干sql语句组成,如果只有一条语句也可以不写delimiter和begin, end

存储过程的三个类型参数(三类形参):
in 当变量在存储过程中改变的时候,那个穿进去的形参可以进行改变,在存储内部可以接受到改变的值,但是在外面接受不到,就还是之前我们传进去的那个形参了,内部可以使用,也可以读出来我们最初传进去的那个形参的值。
out:这个数据类型,我们最开始接收到的形参变量不能存储使用,最初我们读到的值在存储内部显示的是null,但是在当存储过程中我们修改这个值的时候,内部就可以在内部使用修改后的值,在外部同样也会随其改变,(全局)
inout:外部传的值会传到内部,也会被读取,内部修改的值也会反馈到外部。

举个例子
:create procedure p_out(out num int) begin select num; set num=100; select num; end$$

*存储过程三个参数的区别
*IN类型参数可以接收变量也可以接收常量,传入的参数在存储过程内部使用即可,但是在存储过程内部的修改无法传递到外部。
OUT类型参数只能接收一个变量,接收的变量不能够在存储过程内部使用(内部为NULL),但是可以在存储过程内对这个变量进行修改。因为定义的变量是全局的,所以外部可以获取这个修改后的值。INOUT类型参数同样只能接收一个变量,但是这个变量可以在存储过程内部使用。在存储过程内部的修改也会传递到外部。

创建变量

用户变量方法:
set@[变量名]=值;表示这是一个用户变量,使用时用@[变量名]。
局部变量方法:
在函数内部设置declare[变量名][变量类型]为局部变量,局部变量可以使用set赋值或者着使用into关键字。

使用函数和存储过程

1.调用存储过程
语法: call存储过程名字([存储过程的参数[,……]])
2.调用存储函数
语法:select存储函数名字([存储过程的参数[,……]])

3.使用show status语句查看存储过程和函数的信息
语法: show {procedure/function} status [like’存储过程或存储函数的名称’]
显示内容:数据库、名字、类型、创建者、创建和修改日期
4.使用show create语句查看存储过程和函数的定义
语法: show create {procedure|function}存储过程或存储函数的名称
5.删除存储过程或存储函数
语法:
DROP{PROCEDURE│ FUNCTION}[IF EXISTS]存储过程或者函数名

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rebirth-LSS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值