码迷,mamicode.com
首页 > 数据库 > 详细

mysql 存储过程学习

时间:2016-08-11 19:25:29      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

基本语法就自己百度吧,虽然我百度了,但是我基本没看明白,还是多敲代码的好啊

1、delimiter 

     更改命令结束符(因为在procedure中经常要用到默认的命令结束符--分号(;)
     所以在创建procedure的时候需要定义新的结束符以说明创建procedure的命令结束)这里将结束符号改成美元符号($)

   变量:

    变量的作用范围同编程里面类似,在这里一般是在对应的begin和end之间。在end之后这个变量就没有作用了,不能使用了。这个同编程一样。

     另外有种变量叫做会话变量(session variable),也叫做用户定义的变量(user defined variable)。这种变量要在变量名称前面加上“@”符号,叫做会话变量,代表整个会话过程他都是有作用的,这个有点类似于全局变量一样。这种变量用 途比较广,因为只要在一 个会话内(就是某个应用的一个连接过程中),这个变量可以在被调用的存储过程或者代码之间共享数据。

   局部变量

      DECLARE var_name[,...] type [DEFAULT value]

      如 declear a int(2) default 2;

     注意该语句使用的地方(不能在外部程序中使用)

 

    赋值语句set

    SET var_name = expr [, var_name = expr] ...

   如set a=5;set a=a+4;

   赋值的所有操作都要使用set语句,直接使用a=5的操作是非法的

   注意该语句使用的地方(不能在外部程序中使用)

 

    @操作符

     @a用于定义一个全局变量,该变量的生命周期只在本次连接。

     set @a=3;赋值语句

     set @a=b语句可存在于任何语句块中

 

2、MySQL中,创建存储过程的基本形式如下:

  1. CREATE PROCEDURE sp_name ([proc_parameter[,...]])  
  2.         [characteristic ...] routine_body 

      其中,sp_name参数是存储过程的名称;proc_parameter表示存储过程的参数列表; characteristic参数指定存储过程的特性;routine_body参数是SQL代码的内容,可以用BEGIN…END来标志SQL代码的开始和结束。

      proc_parameter中的每个参数由3部分组成。这3部分分别是输入输出类型、参数名称和参数类型。其形式如下:

  1. [ IN | OUT | INOUT ] param_name type 

     其中,IN表示输入参数;OUT表示输出参数; INOUT表示既可以是输入,也可以是输出; param_name参数是存储过程的参数名称;type参数指定存储过程的参数类型,该类型可以是MySQL数据库的任意数据类型。

     列:

    delimiter $

    create procedure mytest(out pamar int)

    begin

     select count(*) into param from user;

    end$

    调用:

    demiliter ;   (命令结束符更改回来)

    call mytest(@num);    (会话变量,参考前面)

    select @num  (读取变量值)

    drop procedure mytest;   //删除存储过程

 

    /************************************/

    create procedure mytest(inout sexflag int)

    begin

    select * from user where sex=sexflag

    end$

    set @sexflag=xx

   call  mytest(@sexflag);

 

   /****************************************/

   create procedure test()

   begin

   declare  i int   //定义变量

   set i=0;   //设置变量值

   while i<10 do

   insert into user(username,password) values(i,‘pwd‘);

   或者

   insert into user(username,password) values(concat(‘user‘,i),"pwd");

   set i=i+1;

   end while;

   end$

 

   delimiter ;

   call test();

   /****************/

   delimiter $

   create procedure test1(in param int)

   begin

   (也可以定义变量

       declare i int;

       set i=param+1;

   )

   if param=1 then

      insert into  user(username,password) values(‘eeee‘,‘11111‘);

   else

      insert into user2(usename,password) values(‘ttt‘,‘222222222222‘);

  enf if;

  end$

  delimiter ;

  call test1(1); 或者  call test1(2);

 

   /********************************/

  delimiter $

 create procedure mytest(in param int)

 begin

  set @num=1;

  while @num<20 do

  if param=1 then

     insert into user(username,password) values(concat(‘user‘,@num),‘pwd‘);

  else

     insert into user2(username,password) values(concat(‘user‘,@num),‘pwd‘);

 end if;

set @num=@num+1;

end while;

end$

 

delimiter ;

call  mytest(1) 或者 call  mytest(2)

 

mysql 存储过程学习

标签:

原文地址:http://www.cnblogs.com/ysp123/p/5762006.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!