MySQL高级应用——存储过程和函数

网友投稿 229 2022-09-25

MySQL高级应用——存储过程和函数

一、存储过程和函数

create procedure用来创建存储过程, create function用来创建函数

1、知识点概述

函数与存储过程最大的区别就是函数调用有返回值,调用存储过程用call语句,而调用函数就直接引用函数名+参数即可

Definer和sql security子句指定安全环境

Definder是MySQL的特殊的访问控制手段,当数据库当前没有这个用户权限时,执行存储过程可能会报错sql secuirty的值决定了调用存储过程的方式,取值 :definer(默认)或者invoker

definer:在执行存储过程前验证definer对应的用户如:cdq@127.0.0.1是否存在,以及是否具有执行存储过程的权限,若没有则报错invoker:在执行存储过程时判断inovker即调用该存储过程的用户是否有相应权限, 若没有则报错

IN,OUT,INOUT三个参数前的关键词只适用于存储过程,对函数而言所有的参数默认都是输入参数

IN输入参数用于把数值传入到存储过程中;OUT输出参数将数值传递到调用者,初始值是NULL;INOUT输入输出参数把数据传入到存储过程,在存储过程中修改之后再传递到调用者

Delimiter命令是改变语句的结束符, MySQL默认的结束符为;号,由于procedure和function中的;号并不代表创建的结束,所以要替换成另外的结束符以便表示创建的结束Rontine_body子句可以包含一个简单的SQL语句,也可以包含多个SQL语句, 通过begin…end将这多个SQL语句包含在一起MySQL存储过程和函数中也可以包含类似create和drop等DDL语句Comment子句用来写入对存储过程和函数的注释Language子句用来表示此存储过程和函数的创建语言存储过程和函数被标注为deterministic表明当输入相同的参数是会返回相同的结果,反之如果是not deterministic则表示相同参数不会是相同结果,默认是not deterministic

2、常用语句

Drop procedure/function语句用来删除指定名称的存储过程或函数

If exists关键词用来避免在删除一个本身不存在的存储过程或函数时, MySQL返回错误

Begin…end复合语句通常出现在存储过程、函数和触发器中,其中可以包含一个或多个语句,每个语句用;号分开标签语句 标签label可以加在begin…end语句以及loop, repeat和while语句

语句中通过iterate和leave来控制流程, iterate表示返回指定标签位置, leave表示跳出标签

存储过程中的变量

流程控制语句

MySQL支持if,case,iterate,leave,loop,while,repeat语句作为存储过程和函数中的流程控制语句,另外return语句也是函数中的特定流程控制语句

Case语句在存储过程或函数中表明了复杂的条件选择语句

第一个语句中case_value与后面各句的when_value依次做相等的对比, 如果碰到相等的,则执行对应的后面的statement_list,否则接着对比,如果都没有匹配,则执行else后面的statement_list第二个语句中当search_condition满足true/1的结果时,则执行对应的statement_list,否则执行else对应的statement_listStatement_list可以包含一个或多个SQL语句

IF语句在存储过程或函数中表明了基础的条件选择语句

IF语句中如果search_condition满足true/1的条件,则执行对应的statement_list,否则再判断elseif中的search_condition是否满足true/1的条件,如果都不满足则执行else中的statement_list语句Statement_list中可以包含一个或多个SQL语句

Iterate语句仅出现在loop,repeat,while循环语句中,其含义表示重新开始此循环Leave语句表明退出指定标签的流程控制语句块

通常会用在begin…end,以及loop,repeat,while的循环语句中

Loop语句是存储过程或函数中表达循环执行的一种方式

其中的statement_list可以包含一个或多个SQL语句

repeat语句是存储过程或函数中表达循环执行的一种方式

Repeat语句中statement_list一直重复执行直到search_condition条件满足Statement_list可以包含一个或多个SQL语句

while语句是存储过程或函数中表达循环执行的一种方式

当search_condition返回为true时,则循环执行statement_list中的语句,直到 search_condition的结果返回为falseStatement_list中可以包含一个或多个SQL语句

Return语句用在函数中,用来终结函数的执行并将指定值返回给调用

在函数中必须要有至少一个return语句,当有多个return语句时则表明函数有多种退出的方式

3、常用语句

cursor游标

Cursor close语句用来关闭之前打开的游标

数据集中的字段需要和INTO语句中定义的变量一一对应数据集中的数据都fetch完之后,则返回NOT FOUND

Statement可以是一个简单SQL语句,也可以是begin…end组成的多个语句

Condition_value的值有以下几种:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:那些让我印象深刻的bug--05
下一篇:SocialMarketing:不怕比的聚划算,吹响双11预热哨!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~