MySQL中的存储过程和函数

存储过程和函数  

简单的说,存储过程就是一条或者多条SQL语句的集合。可以视为批文件,但是其作用不仅仅局限于批处理。本文主要介绍如何创建存储过程和存储函数,以及如何调用、查看、修改、删除存储过程和存储函数等。

创建存储过程和函数  

  存储程序分为存储过程和存储函数。MySQL创建存储过程和存储函数的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句来调用存储过程,只能用输出变量返回值。存储函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。废话少说,如下步入正文。

创建存储过程

  创建存储过程的基本语法格式为:CREATE PROCEDURE sp_name([proc_parameter]) [characteristics] routine_body

  其中CREATE PROCEDURE为创建存储过程的关键字,sp_name为存储过程的名称,pro_parameter为指定存储过程的参数列表,其中参数列表如下:

[IN|OUT|INOUT] param_name type 其中,IN表述输入参数,OUT表示输出参数,INOUT表示即可输入也可输出;param_name表述参数名称;type表示参数类型,该类型可以是MySQL数据库中的任意类型。

characteristics指定存储过程的特性,有以下取值:

LANGUAGE SQL:说明routine_body部分是由SQL语句组成的,当前系统支持的语言为SQL,SQL是LANGUAGE特性的唯一值。

[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。

COMMENT 'string':注释信息,用来描述存储过程或函数。

routine_body是SQL代码的内容,可以用BEGIN...END来表示SQL代码的开始和结束。

  我们从最简单的存储过程开始说起,如下是不包含任何参数的存储过程,代码为:CREATE PROCEDURE Proc() BEGIN SELECT * FROM tb_score; END; 我们定义了一个名称为Proc的存储过程,该过程是用来查询tb_score(该表接上篇博客,已存在)数据库表中的所有数据。

     

MySQL中的存储过程和函数

 

MySQL中的存储过程和函数

 

MySQL中的存储过程和函数

  第一张图是通过执行sql语句查询到tb_score表中的数据。第二张图是创建存储过程,其中第一句DELIMITER //是将MySQL的结束符设置为//,因为MySQL默认的结束符为分号,为了避免与存储过程中SQL语句结束符相冲突,需要DELIMITER改变存储过程的结束符,并以“END //”结束存储过程。第三张图是调用存储过程,在调用存储过程之前先将MySQL结束符恢复为默认的分号(DELIMITER ;)然后通过CALL Proc()调用。

  接下来我们讲解MySQL存储过程中的参数IN、OUT、INOUT,IN作为输入,将输入作为参数传输到存储过程的执行当中去;OUT作为输出,将存储过程的输出通过参数传出来,而INOUT参数可以同时作为输入和输出。

  还是通过存储过程查询tb_score表,不过这次我们要查询课程号为1(cID=1)的所有学生的成绩,存储过程定义为:CREATE PROCEDURE Proc_cID(IN classID INT) BEGIN SELECT * FROM tb_score WHERE cID=classID; END;

 

MySQL中的存储过程和函数

 

MySQL中的存储过程和函数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/68a6aa26bcf71966e2111c3d32e8ac96.html