在开发过程中,经常会遇到重复使用某一个功能的情况,为此,MySQL引入了存储过程
存储过程
就是一条或多条SQL语句的集合,当对数据库进行一系列复杂操作时,存储过程可以将这些复杂操纵,封装成一个代码块,以便重复使用,大大减少数据库开发人员的工作量
创建存储过程
使用CREATE PROCEDURE语句
CREATE PROCEDURE sp_name([proc_parameter])
[characteristics……]routine_body
参数说明
CREATE PROCEDURE,创建存储过程的关键字
Sp_name,为存储过程的名称
Proc_parameter,为指定存储过程的参数列表,参数列表的形式,如下
[IN|OUT|INOUT]param_name type
参数列表说明
IN,表示输入参数
OUT,表示输出参数
INOUT,表示既可以输入,也可以输出
Param_name,表示参数名称
type,表示参数的类型,可以是MySQL数据库中的任意类型
在创建存储过程的语法格式中,characteristics用于指定存储过程的特性,取值如下
LANGUAGE SQL
说明,routine_doby部分,是由SQL语句组成的,当前系统支持的语言为SQL,SQL是LANGUAGE的唯一值
[NOT] DETERMINISTIC
指明存储过程执行的结果是否正确,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代码的开始和结束