数据库知识点程序员MySQL

SQL编程语法

2018-05-11  本文已影响75人  StrongZhao
声明变量:

语法:declare var_name[,...] type [default value]
说明:这个语句被用来声明局部变量。要给变量提供一个默认值,需要包含一个default子句。值可以被指定为一个表达式,不需要为一个常数。如果没有default子句,初始值为null。局部变量的作用范围在它被声明的begin ... end块内。它可以被用在嵌套的块中,除了那些用相同名字声明变量的块。
ex:

declare a int default 0;
declare b int default 1;
declare c,d int;
变量赋值
set @a=0,@b=0,@c=0;
或
select @a:=1,@b:=2,@c:=3; 

ps:对于使用select语句为变量赋值的情况,若返回结果为空,即没有记录,此时变量的值为上一次变量赋值时的值,如果没有对变量赋过值,则为null。

select id,name into x,y from user limit 1;
begin...end复合语句

语法:
[begin_label:] begin
[statement_list]
end [end_label]
说明:存储子程序可以使用begin... end复合语句来包含多个语句。statement_list 代表一个或多个语句的列表。statement_list之内每个语句都必须用分号(;)来结尾。 复合语句可以被标记。除非begin_label存在,否则end_label不能被给出,并且如果二者都存在,他们必须是同样的
ex:

\\ begin
    declare a int default 1;
    declare b int default 4;
    declare c int;
    if a+b == 5 then
        c = a+b;
    end if;
  end//
流程控制结构
delimiter //
create procedure test(in inparameter int)
begin
      declare a int;
      set a = inparameter + 1;
      if a = 0 then
         .......;
      end if;
      if inparameter = 0 then
          .......;
      else
          .......;
     end if;
end; //
delimiter ;
create procedure test2 (in parameter1 int)
begin
     declare a int;
     set a = parameter1 + 1;
     case a
          when 0 then insert into  t values(166);
          when 1 then insert into t values(158);
          else insert into t values(198);
     end case;
end; 
create procedure test3 ()
begin
     declare a int;
     set a = 0;
     while a < 5 do
           set a = a + 1;
      end while;
end; 

loop … end loop ex:

create procedure test4 ()
begin
     declare a int;
     set a = 0;
     loop_label: loop
         set a = a + 1;
         if a >= 5 then
             leave loop_label;
         end if;
    end loop;
end; 

ps:loop允许某特定语句或语句群的重复执行,实现一个简单的循环构造。在循环内的语句一直重复直到循环被退出,退出通常伴随着一个leave 语句。
repeat … end repeat ex:

create procedure test5 ()
begin
     declare a int;
     set a = 0;
     repeat
          set a = a + 1;
     until a >= 5 end repeat;
end; 

迭代(ITERATE)语句ex:

create procedure test6 ()
begin
     declare a int;
     set a = 0;
     loop_label: loop
         if a = 3 then
             set a = a + 1;
             iterate loop_label;
         end if;
         set a = a + 1;
         if a >= 5 then
             leave loop_label;
         end if;
     end loop;
end; 
条件和异常处理程序:

语法:
declare handler_type handle for condition_value[,...] sp_statement
handler_type:
continue | exit | undo
condition_value:
SQLSTATE [VALUE] sqlstate_value | condition_name | SQLWARNING | NOT FOUND | SQLEXCEPTION

说明:这个语句指定每个可以处理一个或多个条件的处理程序。如果产生一个或多个条件,指定的语句被执行。
对一个CONTINUE处理程序,当前子程序的执行在执行处理程序语句之后继续。对于EXIT处理程序,当前BEGIN...END复合语句的执行被终止。UNDO 处理程序类型语句还不被支持。
SQLWARNING是对所有以01开头的SQLSTATE代码的速记。
NOT FOUND是对所有以02开头的SQLSTATE代码的速记。
SQLEXCEPTION是对所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码的速记。

声明自定义条件:

语法:declare condition_name condition for condition_value
condition_value:
SQLSTATE [VALUE] sqlstate_value
ex:

create table test (s1 int,primary key (s1));
delimiter //
create procedure handlerdemo ()
begin
     declare continue handle for SQLSTATE '23000' SET @x = 3; 
     set @x = 1;
     insert into test values(1);
     set @x = 2;
     insert into test values(2);
     set @x = 3;
end;//
delimiter ;
上一篇下一篇

猜你喜欢

热点阅读