MySQL中的存储过程

1. 存储过程概述

MySQL5.0 版本开始支持存储过程,存储过程能够将复杂的 SQL 逻辑封装在一起,而应用程序无须关注存储过程内部复杂的 SQL 逻辑,而只需要简单地调用存储过程即可

存储过程的英文是 Stored Procedure。它的思想很简单,就是一组经过预先编译的 SQL 语句的封装

1.1. 存储过程的执行

执行过程:存储过程预先存储在 MySQL 服务器上,需要执行的时候,客户端只需要向 MySQL 服务器发出调用存储过程的命令,MySQL 服务器就可以把预先存储好的这一系列 SQL 语句全部执行

存储过程的好处

  • 简化操作,提高了 SQL 语句的重用性,减少了开发程序员的压力
  • 减少操作过程中的失误,提高效率
  • 减少网络传输量(客户端不需要把所有的 SQL 语句通过网络发给服务器)
  • 减少了 SQL 语句暴露在外的风险,也提高了数据查询的安全性

在这里插入图片描述

2. 创建存储过程

2.1. 参数类型

存储过程的参数类型可以是 IN、OUTINOUT

  • 没有参数:表示无参数无返回
  • 仅仅带 IN 类型:表示有参数无返回
  • 仅仅带 OUT 类型:表示无参数有返回
  • 既带 IN 又带 OUT: 表示有参数有返回
  • INOUT:表示有参数有返回

注意:IN、OUT、INOUT 都可以在一个存储过程中带多个

2.2. 语法结构

创建存储过程的语法

CREATE PROCEDURE 存储过程名

(IN|OUT|INOUT 参数名 参数类型,...) 

[characteristics ...] 

BEGIN
	存储过程体 
END

2.2.1. 语法结构说明

  • 参数前面的关键字
关键字 作用
IN 当前参数为输入参数,也就是表示入参;
存储过程只是读取这个参数的值。如果没有定义参数种类, 默认就是 IN ,表示输入参数
OUT 当前参数为输出参数,也就是表示出参;
执行完成之后,调用这个存储过程的客户端或者应用程序就可以读取这个参数返回的值了
INOUT 当前参数既可以为输入参数,也可以为输出参数
  • 形参类型可以是 MySQL 数据库中的任意类型
  • characteristics:表示创建存储过程时指定的对存储过程的约束条件,其取值信息如下
LANGUAGE SQL

| [NOT] DETERMINISTIC

| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

| SQL SECURITY { DEFINER | INVOKER }

| COMMENT ‘string’
参数 说明
LANGUAGE SQL 说明存储过程执行体是由SQL语句组成的,当前系统支持的语言为SQL
[NOT] DETERMINISTIC 指明存储过程执行的结果是否确定。DETERMINISTIC表示结果是确定的。每次执行存储过程时,相同的输入会得到相同的输出。NOT DETERMINISTIC表示结果是不确定的,相同的输入可能得到不同的输出。如果没有指定任意一个值,默认为NOT DETERMINISTIC
{ CONTAINS SQL |NO SQL |READS SQL DATA |MODIFIES SQL DATA } 指明子程序使用SQL语句的限制:
CONTAINS SQL表示当前存储过程的子程序包含SQL语句,但是并不包含读写数据的SQL语句;
NO SQL表示当前存储过程的子程序中不包含任何SQL语句;
READS SQL DATA表示当前存储过程的子程序中包含读数据的SQL语句;
MODIFIES SQL DATA表示当前存储过程的子程序中包含写数据的SQL语句。
默认情况下,系统会指定为CONTAINS SQL
SQL SECURITY { DEFINER |INVOKER } 执行当前存储过程的权限,即指明哪些用户能够执行当前存储过程。
DEFINER表示只有当前存储过程的创建者或者定义者才能执行当前存储过
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值