存储过程

在日常开发过程中,接触到存储过程的机会或许不多,通常只需要关注业务逻辑sql就可以很好的完成工作。但在某些情况下,例如报表、数据分析等,使用存储过程,能够简化一系列的复杂sql,执行速度更快(预编译过),出错率低。综合来看,存储过程是我们应该必须掌握的一个技能。

MySQL中存储程序分为存储过程和函数,它们本质上都是存储程序。函数只能通过return来返回结果并且不能使用临时表和某些函数,所以函数使用相对较少,这里只关注存储过程的使用。

初识存储过程

创建存储过程,需要使用CREATE PROCEDURE关键字,语法如下:

CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body

针对语法中的一些内容,总结如下表:

关键词

含义

具体内容

sp_name

存储过程名称

存储过程的名称,操作存储过程时使用。

proc_parameter

参数列表

用于定义存储过程所需参数,有三种参数:IN、OUT、INOUT 。IN表示输入参数;

OUT表示输出参数;

INOUT既可以表示输入参数也可以表示输出参数;

语法为:[IN|OUT|INOUT] param_name type

其中type可以使用mysql所支持的所有类型。

characteristic

指定存储过程的特性

分为以下几种类型:

COMMENT 'string':注释信息;

LANGUAGE SQL:说明routine_body部分是由SQL语句组成;

[NOT] DETERMINISTIC:指明存储过程的结果是否确定。DETERMINISTIC表明存储过程在相同的输入有相同的输出。NOT DETERMINISTIC表明结果是不确定的。默认采用NOT DETERMINISTIC;

{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }:指明子程序使用SQL语句的限制。CONTAINS SQL表明子程序包含SQL语句,但是不包含读写数据语句。NO SQL表明子程序不包含SQL语句;READS SQL DATA表明子程序包含读数据的语句。 MODIFIES SQL DATA表明子程序包含写数据的语句。默认采用CONTAINS SQL;

SQL SECURITY { DEFINER | INVOKER }:指定存储过程谁有权限执行;DEFINER表明定义者才能执行。INVOKER表示拥有权限的调用者可以执行。默认采用DEFINER;

routing_body

</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值