首页 > 代码库 > MySQL存储过程
MySQL存储过程
下面是一个MySQL存储过程的简单例子, 目的是返回最新插入的一条记录的id值。
demiliter | drop procedure if exists addUser | create procedure addUser(in pname varchar(40),in birthday date,out pid int) begin insert into user(name,birthday) values (pname,birthday); select last_insert_id into pid; end | demilter;
MySQL中执行一条语句的依据是分号(";"),碰到了”;“则会将之前的输入作为一条语句来执行。 demiliter |会将判断的依据由”;“换成”|“,碰到”|“认为是一条语句的结束。如果不进行转换,遇到”;“将之前的执行则一定会出错。
上面的例子现用 demiliter |会将判断的依据由”;“换成”|“,最后再用demiliter ;会将判断的依据由”|“换成”;“。
创建存储过程的语法是 create procedure名称(输入/输出,参数名,参数类型),对应于例子中的 create procedure addUser(in pname varchar(40),in birthday date,out pid int)。
begin和end之间的就是存储过程要完成的功能。
create procedure的参数类型有in,out,inout三种。
in和out,inout的不同点:修改的结果将不能返回,可以看下面的例子。
demiliter // drop procedure if exists in_paramter_test// create procedure in_paramter_test(in p_in int) begin select p_in ; set p_in =2; select p_in ; end // demilter;
设置临时变量:mysql > set @p_in = 1;
mysql >call in_paramter_test(@p_in);
+--------+
| p_in |
+--------+
| 1 |
+--------+
+--------+
| p_in |
+--------+
| 2 |
+--------+
mysql >select @p_in;
+--------+
| p_in |
+--------+
| 1 |
+--------+
使用out的例子:
demiliter // drop procedure if exists out_paramter_test// create procedure out_paramter_test(out p_out int) begin select p_out ; set p_in =2; select p_out ; end // demilter;
执行和in相同的操作,结果都是2.
@用户变量,连接参数。
MySQL存储过程