本文来说下mysql存储过程基本语法


文章目录

  • 基本语法
  • 使用实例
  • 变量的使用
  • 变量定义
  • declare语句
  • 变量赋值
  • 用户变量
  • 存储过程的参数
  • in 输入参数
  • out 输出参数
  • inout输入输出参数
  • 本文小结



基本语法

存储过程就是具有名字的一段代码,用来完成一个特定的功能。创建的存储过程保存在数据库的数据字典中

// 声明存储过程
CREATE
    [DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

// 存储过程的参数
proc_parameter:
    [ IN | OUT | INOUT ] param_name type

// 指定存储过程的特性
characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
 
// SQL代码的内容,可以用BEGIN...END来表示SQL代码的开始与结束
routine_body:
  Valid SQL routine statement
 
[begin_label:] BEGIN
  [statement_list]
    ……
END [end_label]

delimiter问题

在Mysql中,因为存储过程中的SQL语句必须以分号结尾,而mysql的cmd窗口在遇到sql语句加分号时,会直接执行语句,而发送冲突导致存储过程创建失败。

因此我们要修改存储过程的结束符,让mysql可以识别。


使用实例

存在一张员工表,有如下的三条数据

MySQL存储过程中判断语句 mysql存储过程的语法_后端

创建一个存储过程,查询员工的基本信息

delimiter//
create procedure get_employee_info()
begin
select * from employee_info;
end//
delimiter;

创建成功

MySQL存储过程中判断语句 mysql存储过程的语法_后端_02


MySQL存储过程中判断语句 mysql存储过程的语法_基本语法_03

MySQL存储过程中判断语句 mysql存储过程的语法_基本语法_04

如何调用存储过程

call sp_name[(传参)];

调用成功

MySQL存储过程中判断语句 mysql存储过程的语法_MySQL存储过程中判断语句_05

删除存储过程

DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

这个语句被用来移除一个存储程序或函数。即,从服务器移除一个指定的子程序。

MySQL存储过程中判断语句 mysql存储过程的语法_后端_06


变量的使用

变量定义

局部变量声明一定要放在存储过程体的开始:

DECLAREvariable_name [,variable_name...] datatype [DEFAULT value];

使用实例

MySQL存储过程中判断语句 mysql存储过程的语法_基本语法_07

结果

MySQL存储过程中判断语句 mysql存储过程的语法_基本语法_08


declare语句

DECLARE仅被用在BEGIN … END复合语句里,并且必须在复合语句的开头,在任何其它语句之前。

MySQL存储过程中判断语句 mysql存储过程的语法_存储过程_09


变量赋值

SET 变量名 = 表达式值 [,variable_name = expression …]

MySQL存储过程中判断语句 mysql存储过程的语法_基本语法_10


MySQL存储过程中判断语句 mysql存储过程的语法_存储过程_11


MySQL存储过程中判断语句 mysql存储过程的语法_MySQL存储过程中判断语句_12


用户变量

用户变量名一般以@开头

MySQL存储过程中判断语句 mysql存储过程的语法_MySQL存储过程中判断语句_13


存储过程的参数

常用格式

CREATE PROCEDURE 存储过程名称(参数模式 参数名 参数类型)
BEGIN
	存储过程体
END

参数模式有三种

  1. IN:该参数可以作为输入,也就是该参数需要调用方传入值
  2. OUT:该参数可以作为输出,也就是该参数可以作为返回值
  3. INOUT:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

in 输入参数

使用实例:根据员工工号查询出员工信息

CREATE DEFINER=`tmis`@`%` PROCEDURE `get_employee_info`
(IN p_employeeCode INTEGER)
begin
   select * from employee_info
   WHERE employee_code = p_employeeCode;
end

MySQL存储过程中判断语句 mysql存储过程的语法_MySQL存储过程中判断语句_14

MySQL存储过程中判断语句 mysql存储过程的语法_基本语法_15


out 输出参数

out 表示从存储过程内部传值给调用者,封装有参数的存储过程,传入员工编号,返回员工名字

CREATE DEFINER=`tmis`@`%` PROCEDURE `get_employee_info`
(IN p_employeeCode INTEGER,out out_employeeName varchar(50))
begin
   select employee_name into out_employeeName from employee_info
	 WHERE employee_code = p_employeeCode;
end

调用与查询

MySQL存储过程中判断语句 mysql存储过程的语法_SQL_16

MySQL存储过程中判断语句 mysql存储过程的语法_基本语法_17


inout输入输出参数

inout 表示从外部传入的参数经过修改后可以返回的变量,既可以使用传入变量的值也可以修改变量的值(即使函数执行完)

CREATE DEFINER=`tmis`@`%` PROCEDURE `get_employee_info`
(INOUT p varchar(50))
begin
   select employee_name into p from employee_info
	 WHERE employee_code = p;
end

MySQL存储过程中判断语句 mysql存储过程的语法_后端_18


MySQL存储过程中判断语句 mysql存储过程的语法_存储过程_19


本文小结

本文介绍了一些mysql存储过程的基本语法知识与内容。