存储过程和函数

1、什么是存储过程和函数

事先经过编译并存储在数据库中的一段SQL语句的集合。

函数必须有返回值 ,而存储过程没有。

函数的参数只能是in类型的,存储过程的参数可以使用in、out、input类型

注意:若有函数从其他类型的数据库迁移到MySQL,那么久可能因此需要将函数改造成存储过程。

2、存储过程和函数的相关操作

(1)确认是否有相应的权限。

创建存储过程或函数:需要create routine权限

修改或者删除存储过程或函数:需要alter routine权限

执行存储过程或者函数:需要execute权限

(2)创建、修改存储过程或函数的语法:




调用过程的语法如下:

CALL sp_name([parameter[,...]])

(3)MySQL的存储过程和函数中运行包含DDL语句,也允许在存储过程中执行提交Commit即确认之前的修改或者回滚Rollback即放弃之前的修改。

不允许执行load data infile语句。

可以调用其他的过程或者函数。

DELIMITER $$:将结束符改成$$

(4)不支持使用create or replace对存储过程和函数进行修改。要用alter

(5)


(6)删除存储过程或者函数

一次只能删除一个,且有需要有alter routine权限。

drop {procedure |function}[if exists] sp_name

(7)查看存储过程或者函数

查看存储过程或者函数的状态:show {procedure|function} status [like 'pattern']

查看存储过程或者函数的定义:show create {procedure|function} sp_name

通过查看information_schema.Routines了解存储过程和函数的信息(名称、类型、语法、创建人)

(8)变量的使用(5.1中变量不区分大小写)

变量的定义:declare可定义局部变量,作用范围只能在begin..end块中,可以用在嵌套的块中。变量的定义必须写在复合语句的开头,并且在任何其他语句的前面。

declare var_name[,...]   type   [default  value] 


变量的赋值:直接赋值set 、通过查询赋值

 set var_name=expr[,var_name=expr]

select col_name[,...]  into  var_name[,...]  table_expr

(9)定义条件和处理

条件的定义:declare  condition_name  condition for  condition_value

condition_value:

SQLSTATE [VALUE] sqlstate_value

   |mysql_error_code


条件的处理:declare handler_type handler for condition_value[,...] sp_statement

handler_type:

       CONTINUE:继续执行下面的语句

|EXIT:执行终止

|UNDO:还不支持

condition_value:

SQLSTATE[value] sqlstate_value

|condition_name

|SQLWARNING:对所有以01开头的SQLSTATE代码的速记

|NOT FOUND:对所有以02

|SQLEXCEPTION:对所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码的速记

|mysql_errpr_code

(10)光标的使用

在存储过程和函数中,可以使用光标对结果进行循环的处理。

声明光标:declare  cursor_name  cursor for  select_statement

OPEN光标:open cursor_name

fetch光标:fetch  cursor_name into var_name[,var_name]...

close光标:close  cursor_name

(11)流程控制

if、case、loop、leave、iterate、repeat、while语句



leave:从标注的流程构造中退出,通常和begin..end或者循环一起使用

interate:必须用在循环中,跳过当前循环的剩下的语句,直接进入下一轮循环。

repeat:有条件的循环控制语句,当满足条件的时候退出循环。


(12)事件调度器

将数据库按自定义的时间周期出发某种操作,可以理解为时间触发器。


查看调度去状态:show events  \G;

查看时间调度器状态:show   variables  like  '%scheduler%'

打开调度器:set  global  event_scheduler = 1;

查看进程:show  processlist

禁用(disable event )或者删除(drop  event)调度器







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值