MySQL-存储过程

本文介绍了MySQL中的存储过程和存储函数的创建方法,详细讲解了局部变量和全局(会话)变量的使用,包括如何声明、赋值,并通过示例展示了在存储过程中如何操作这些变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值