• mysql 存储过程学习


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

    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)

  • 相关阅读:
    chrome远程调试真机上的app
    高性能Cordova App开发学习笔记
    eclipse导入cordova项目
    跨域后模拟器上还是不能显示数据
    跨域请求数据
    eclipse导入cordova创建的项目
    cordova添加platform
    sdk更新代理设置
    NPM安装之后CMD中不能使用
    android开发环境搭建
  • 原文地址:https://www.cnblogs.com/ysp123/p/5762006.html
Copyright © 2020-2023  润新知