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.


       @用于设置用户变量,  @@用于设置系统变量。

       要想设置一个GLOBAL变量的值,使用下面的语法:
  mysql> SET GLOBAL sort_buffer_size=value;
  mysql> SET @@global.sort_buffer_size=value;
  要想设置一个SESSION变量的值,使用下面的语法:
  mysql> SET SESSION sort_buffer_size=value;
  mysql> SET @@session.sort_buffer_size=value;
  mysql> SET sort_buffer_size=value;

 

 

      

 

posted on 2014-11-16 21:05  lnlvinso  阅读(346)  评论(0编辑  收藏  举报