mysql的存储过程和函数小结

本文详细介绍了MySQL的存储过程和函数的创建、定义变量、条件处理、光标使用及流程控制,包括IF、CASE、LOOP等语句的用法,并讲解了如何查看、修改和删除存储过程和函数。
摘要由CSDN通过智能技术生成

创建存储过程

基本语法如下:
create procedure sp_name ( [proc_parameter]) [characteristics ... ] routine_body
(1)create procedure 用来创建存储过程的关键字。
(2)sp_name 为存储过程的名称
(3) proc_parameter 为存储过程的参数列表,列表形式如下:

[in |out |inout] param_name type 

in为输入参数,out为输出参数;inout为既可以输入也可以输出参数;param_name 为参数名称 type为参数的类型,可以是mysql的参数的任意类型。

(4) characteristics 指定存储过程的特征,取值较多。
LANGUAGE SQL
存储过程语言,默认是sql,说明存储过程中使用的是sql语言编写的,暂时只支持sql,后续可能会支持其他语言

NOT DETERMINISTIC
是否确定性的输入就是确定性的输出,默认是NOT DETERMINISTIC,只对于同样的输入,输出也是一样的,当前这个值还没有使用

CONTAINS SQL
提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的
包括以下四种选择
1.CONTAINS SQL表示子程序不包含读或者写数据的语句
2.NO SQL 表示子程序不包含sql
3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句
4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER
用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINER
DEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的
说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的user的权限执行的。
INVOKER 调用者的身份来执行,对于当前用户来说:如果执行存储过程的权限,以当前身份去访问表,如果当前身份没有访问表的权限,即便是有执行过程的权限,仍然是无法成功执行过程的调用的。
说白了就是当前用户调用存储过程,只有当前用户有执行存储过程中涉及的对象的操作的权限的时候,才能成功执行。

COMMENT 'string'
存储过程的注释性信息写在COMMENT里面,这里只能是单行文本,多行文本会被移除到回车换行等

(5) routine_body 是SQL的代码部分,用begin和end来代表开始和结束。
例如创建名为 checksttu()的存储函数

delimiter //
>  create procedure checksttu()
>  begin
>  select avg(grade) as avggrade from sc;
> end //

deliliter 语句用来确认结束符,由于sql语句用分号来结尾,创建存储过程时有sql语句,分号来结尾会和创建过程的结束冲突,所以需要改变结束符的方式。

创建存储函数

crate function func_name( [func_parameter]) returns type [characteristic ...] routine_body

returns type 是函数返回的数据类型,characteristic和存储过程的一样。
例如:

> delimiter //
> create function Sumer()
> returns int(11)
> return (select sum(grade) from sc where sno='201708034101');
> //

定义变量

declare var_name[,varname] ... data ...type [default value];
用set语句为变量赋值
例如:

declare var1,var2,var3 INT;
set var1=10,var2=20;
set var3=var1+var2;

也可以用select...into语句进行赋值
select col_name[,...] into var_name[,...] table_expr

declare fruit_name char(50);
declare fruit_price decimal(8,2);

select f_name,f_price into fruitname,fruiitprice
 from fruits f_id='a1'

定义条件和处理程序

定义条件是实现定义程序执行过程中遇到的问题,处理程序遇到这些问题的处理方式,并且保证存储过程或函数在遇到警告或者错误的时候能正常的执行,增强程序处理错误的能力。

1.定义条件

DECLARE condition_name CONDITION FOR [condition_type]
[contion_type] :
SQLSTATE [VALUE] sqlstate_value| mysql_error_code

[condition_type为条件的类型,sqlstate_value 为长度为5的字符串类型的错误代码,mysql_error_code 为数值类型的错误代码。
语句用来指定需要特殊处理的条件 ,可以将一个名字和指定的错误关联起来 ,这个名字可以直接用到处理程序中。
例如:

declare command_not_allowed CONDITION FOR SQLSTATE '
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值