1.存储过程
MySQL中的存储过程和SQL Server的存储过程的创建有所区别
在MySQL中,MySQL中默认的语句结束符是分号(;)。而存储过程中的SQL语句也需要使用分号来结束。为了避免冲突,需要首先使用delimiter语句将MySQL的结束符设置为别的字符,例如”//”或者”&&”(语句为”delimiter // “或者”delimiter &&”)。最后在存储过程创建结束之后,需要使用”delimiter ;”将结束符恢复成分号。
1.1 MySQL创建存储过程
CREATE PROCEDURE sp_name ([proc_parameter[,…]])
[characteristic …] routine_body
sp_name是存储过程的名称,不论存储过程有无参数,其后的( )必须有;proc_parameter是存储过程的参数列表;characteristic指定存储过程的特性;routine_body是SQL代码的内容,可以使用BEGIN…END来标志SQL语句的开始与结束。
1)proc_parameter中每个参数由3部分组成,这3部分分别是输入/输出类型、参数名称、参数类型。
[IN | OUT |INOUT] parameter_name type
其中IN表示输入参数;OUT表示输出参数;INOUT表示既可以输入,也可以输出的参数;parameter_name表示参数名称;type表示参数类型。
1.2示例
创建一个名为test1的存储过程:
/**
通过用户提供的输入参数bid,以及price=500的行(之所以加入了price限制条件,是因为如果不加入此条件,请
求回来多条数据,不能赋值给userid,出现错误),然后将结果赋值给userid;然后调用test1()存储过程,之后
输出输出参数@user中的数据
*/
drop procedure if exists test1;
delimiter //
create procedure test1(in bid varchar(20),out userid varchar(20))
begin
select b.user_id from brands b where b.brand_id = bid and price=500 into userid;
end //
delimiter ;
call test1('50',@user);
select @user;
2.变量的使用
2.1 定义变量
MySQL中使用declare关键字定义变量。
DECLARE var_name[,…] type [DEFAULT value]
其中DECLARE关键字用来声明变量;参数var_name是变量名称,可以同时定义多个变量,变量定义语句之间用逗号隔开即可;default value是设置变量的默认值,如果没有此语句,默认为NULL。
示例:
定义一个变量bid,类型为varchar(20),默认值为50
declare bid varchar(20) default ‘50’
2.2变量赋值
2.2.1 SET赋值
MySQL中,可以使用SET关键字为变量赋值。
SET var_name = expr [,var_name = expr]…
其中,SET是赋值关键字;var_name是变量名称;expr是赋值表达式。一个SET语句可同时为多个变量赋值,变量的赋值语句之间用逗号隔开即可。
示例:
为变量name赋值lucy
SET name = ‘lucy’
2.2.2 使用select … into语句为变量赋值
SELECT col_name[,…] INTO var_name[,…] FROM table_name WEHRE condition
其中,参数col_name表示查询的字段名称;参数var_name是变量的名称;参数table_name表示表的名称;condition参数指查询条件。
示例:
存储过程的示例中,给出了示例
select b.user_id from brands b where b.brand_id = bid and price=500 into userid;