MySQL-存储过程
存储过程是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已定义好的SQL语句。
创建存储过程
在MySQL中,创建存储过程的基本形式如下:
CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [charactersitic..] routine_body
sp_name
表示存储过程的名称
proc_parameter
表示存储过程的参数列表,由三部分组成:
- 输入输出类型:
IN
表示输入参数,OUT
表示输出参数,INOUT
表示即可以输入也可以输出 - 参数名称
- 参数类型
charactersitic
指定存储过程的特性
routine_body
参数是SQL代码的内容,可以使用BEGIN END来标识SQL代码的开始和结束。
例如:
delimiter //
create procedure proc_name (in parameter integer)
begin
declare variable varchar(20);
if parameter = 1 then
set variable = 'MySQL';
else
set variable = 'PHP';
end if;
insert into tb(name) values(variable);
end//
MySQL的存储过程名称不区分大小写。优越存储过程内部语句要以分号结束,所以在定义存储过程前,应将语句结束标志”;
“更改为其他字符。
delimiter //
最后再将结束符恢复成分号delimiter ;
创建存储函数
创建存储函数与创建存储过程大体相同,其基本形式如下:
CREATE FUNCTION func_name([func_parameter])
RETURNS TYPE
[characteristics...] routine_body
变量应用
MySQL存储过程中的参数主要有局部参数和会话参数两种,这两种参数又可以被称为局部变量和会话变量。局部变量只在定义该局部变量的begin...end
范围内有效,会话变量在整个存储过程范围内均有效。
局部变量
局部变量以关键字declare声明,后跟变量名和变量类型,例如:
declare a int;
也可以指定默认值:
declare a int default 10
如下,分别在内层和外层begin...end
块中都定义同名的变量x,其调用存储过程的结果为outer
:
delimiter //
create procedure p1()
begin
declare x char(10) default 'outer';
begin
declare x char(10) default 'inner';
SELECT x;
end;
SELECT x;
end;
//
delimiter ;
call p1();
全局变量
MySQL中的会话变量不必声明即可使用,会话变量在整个过程有效,会话变量名以字符”@
“作为起始字符。
delimiter //
create procedure p2()
begin
set @t=1;
begin
set @t=2;
SELECT @t;
end;
SELECT @t;
end;
//
delimiter ;
call p2();
调用存储过程的结果为2
为变量赋值
MySQL中可以使用DECLARE
关键字来定义变量,定义变量的基本语法如下:
DECLARE var_name[,varname]...date_type[DEFAULT VALUE];
例如:
DECLARE MYPARAM INT DEFAULT 100;
还可以使用SET
关键字为变量赋值
SET var_name=expr[,var_name=expr]...
例如:
SET mr_soft = 10;
另外MySQL中还可以应用另一种方式为变量赋值,其语法结构为:
SELECT col_name[,...] INTO var_name[,...] FROM table_name where condition
其中col_name
参数标识查询的字段名称;var_name
参数是变量的名称;table_name
参数为指定数据表的名称;condition参数为指定查询条件。
例如:从studentinfo表中查询name为”LeonSK”的记录。将记录下的tel字段内容赋值给变量customer_tel,其关键代码如下:
SELECT tel INTO customer_tel FROM student info WHERE name='LeonSK';