Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL存储过程与存储函数

关于MySQL的存储过程与存储函数

作者:不断前进的皮卡丘

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集(这些SQL语句已经编译过了),它存储在数据库中,一次编译后永久有效,需要的朋友可以参考下

初识存储过程

存储过程和视图与函数的对比

存储过程可以直接操作底层数据表,视图是虚拟表,存储过程一旦创建出来,我们直接通过存储过程名调用就可以了,就像用函数一样,相对于函数,存储过程是没有返回值的

接下来看看存储过程的分类,现在不懂没关系,等文章后面内容看完再回过来看,其实分类和函数的分类差不多,就是根据有无参数和有无返回值来划分。

IN,OUT,INOUT都可以在一个存储过程中带多个

存储过程语法

CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...)
[characteristics ...]
BEGIN
	存储过程体
END

类似于Java的语法

修饰符 返回类型 方法名(参数类型 参数名,...){
	方法体;
}

接下来对参数类型前面的IN,OUT,INOUT进行说明

characteristics表示创建存储过程时指定的对存储过程的约束条件,其取值信息如下:

LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'

需要注意的地方:

DELIMITER $
CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名  参数类型,...)
[characteristics ...]
BEGIN
	sql语句1;
	sql语句2;
END $

存储过程调用

准备工作

 -- 准备工作,创建新数据库
 create database  db15;
use db15;
create table emps
as select * from atguigudb.employees;
create table departments
as
    select * from atguigudb.departments;
select * from emps;

无参无返回

存储过程的调用,用call+存储过程名

在这里插入图片描述

OUT类型

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

IN类型

在这里插入图片描述

带IN和OUT

在这里插入图片描述

在这里插入图片描述

带INOUT

在这里插入图片描述

在这里插入图片描述

存储函数的使用

语法

CREATE FUNCTION 函数名(参数名 参数类型,...) 
RETURNS 返回值类型
[characteristics ...]
BEGIN
	函数体   #函数体中肯定有 RETURN 语句
END

说明:

1、参数列表:指定参数为IN、OUT或INOUT只对PROCEDURE是合法的,FUNCTION中总是默认为IN参数。

2、RETURNS type 语句表示函数返回数据的类型;

RETURNS子句只能对FUNCTION做指定,对函数而言这是强制的。它用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句。

3、characteristic 创建函数时指定的对函数的约束。取值与创建存储过程时相同,这里不再赘述。

4、函数体也可以用BEGIN…END来表示SQL代码的开始和结束。如果函数体只有一条语句,也可以省略BEGIN…END。

函数的调用

SELECT 函数名(实参列表)

在这里插入图片描述

注意:

若在创建存储函数中报错“you might want to use the less safe log_bin_trust_function_creators variable”,有两种处理方法:

SET GLOBAL log_bin_trust_function_creators = 1;

对比存储函数和存储过程

关键字调用语法返回值应用场景
存储过程PROCEDURECALL 存储过程()理解为有0个或多个一般用于更新
存储函数FUNCTIONSELECT 函数()只能是一个一般用于查询结果为一个值并返回时

此外,存储函数可以放在查询语句中使用,存储过程不行。反之,存储过程的功能更加强大,包括能够执行对表的操作(比如创建表,删除表等)和事务操作,这些功能是存储函数不具备的。

到此这篇关于关于MySQL的存储过程与存储函数的文章就介绍到这了,更多相关MySQL存储过程与存储函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文