你好,欢迎来到织梦之家,你可以免费观看大量视频教程以及大量模板下载!

流程节制语织梦仿站句(MySQL/MariaDB )-织梦之家(dedehome.com)

时间:2018-04-13 09:00 来源:织梦之家作者:织梦之家 点击:
这个mysql教程将为您说明流程节制语句(MySQL/MariaDB ),详细完成步调:本文目录:1.BEGIN...END2.true和false3.if布局4.case布局5.loop、leave和iterate6.repeat

MySQL/MariaDB中的切合语句布局有:BEGIN...END,if,case,while,loop,repeat,cursor,condition,handler。

在MySQL中,它们都只能在存储措施(procedure,function,trigger)内部利用,但在MariaDB中,从10.1.1版本之后,BEGIN...END,IF,CASE,LOOP,REPEAT,WHILE可以在存储措施的外部利用。但实际上,除了begin、case和if能正常单独界说在存储措施之外,loop、repeat、while都是鸡肋,因为无法给单独界说的布局标签,只能无限轮回而无法退出。

1.BEGIN...END [label:] BEGIN [NOT ATOMIC] [statement_list] END [label]

begin...end默认只能在存储措施内部利用,此时可以利用label为begin...end打上标签。可以在end处利用标签来竣事begin...end。假如end后指定了label,则end处的label必需和begin前的label完全沟通。

可以利用NOT ATOMIC要害字让BEGIN在存储措施外部利用,但此时不能为begin...end打标签DEDEcms织梦视频教程,且必然留意先修改delimiter,省得begin...end中的语句半途终止。

比方,下面三个begin...end语句块:

delimiter $$ begin not atomic /* 在存储措施外部单独利用begin...end */ declare a int; set a=3; select a; end$$ create or replace procedure p1() my_label: begin /* 为begin打上标签 */ declare b int; set b=3; select b; end$$ /* 可以不利用标签竣事begin */ create or replace procedure p2() my_label: begin declare c int; set c=3; select c; end my_label$$ /* 利用的竣事标签必需和开始标签一致 */ delimiter ; call p1; call p2;

在begin...end中,除了可以写一些SQL语句,还可以利用declare界说变量、条件、处理惩罚器和游标。但它们之间有顺序要求,顺序如下:

DECLARE local variables; DECLARE CONDITIONs; DECLARE CURSORs; DECLARE HANDLERs;

还可以begin嵌套,内层的begin可以利用外层begin界说的变量。

delimiter $$ CREATE PROCEDURE t() BEGIN DECLARE x TINYINT UNSIGNED DEFAULT 1; BEGIN DECLARE x CHAR(2) DEFAULT '02'; DECLARE y TINYINT UNSIGNED DEFAULT 10; SELECT x, y; END; SELECT x; END; delimiter ; 2.true和false

在MySQL和MariaDB中,true和false是无条件的真、假。

true和1等价,false和0等价,且它们不区分巨细写。任何时候,都可以交流它们,但任何时候,它们的功效都换转换为数值的1或0。纵然将数据范例界说为int,也可觉得其通报true字符串。

比方:

mysql> select true,false; +------+-------+ | TRUE | FALSE | +------+-------+ | 1 | 0 | +------+-------+ begin not atomic declare a int; set a=true; select a; end$$ +------+ | a | +------+ | 1 | +------+ 3.if语句 IF search_condition THEN statement_list [ELSEIF search_condition THEN statement_list] ... [ELSE statement_list] END IF

个中search_condition是条件判断语句,statement_list是要执行的语句。

在MySQL中,if语句必需作为语句块写在存储进程或函数等措施布局中。在MariaDB 10.1.1之后,可以独立利用,但留意修改delimiter。

-- 独立利用if布局 delimiter $$ if 1>2 then select 'true'; else select 'false'; end if$$ delimiter ; -- 在存储进程中利用 DELIMITER $$ CREATE or replace PROCEDURE proc1(a INT,OUT i INT) BEGIN IF a > 0 THEN SET @a1 = a + 100; ELSEIF a = 0 THEN SET @a1 = a + 200; ELSE SET @a1 = a + 300; END IF ; SET i:=@a1; END$$ DELIMITER ; -- 测试if布局 CALL proc1(1,@a); CALL proc1(0,@b); CALL proc1(-1,@c);

查察功效。

SELECT @a,@b,@c; @a @b @c ------ ------ -------- 101 200 299

留意,尚有一个if(expr,true_value,false_value)函数,假如expr为真,则返回true_value,不然返回false_value,所以这里的if函数和if流程节制语句是差异的。比方:

MariaDB [test]> select if(1>2,'true','false') as a; +-------+ | a | +-------+ | false | +-------+ MariaDB [test]> select if(1<2,'true','false') as a; +------+ | a | +------+ | true | +------+ 4.case语句

在MySQL中,有case表达式和case语句两种布局。

mysql> help case topics: CASE OPERATOR CASE STATEMENT

它们的区别有:

case表达式利用end要害字作为竣事符,而case语句利用end case作为竣事符; case表达式有可选项else,省略它的时候其默认值为null,case语句也有可选项else,可是省略它的时候没有默认值,且else语句中不能是null; case表达式可以在任那边所利用(比方在select中),而case语句只能在存储进程或函数这样范例的编程布局中利用。 mysql> help case operator CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END Examples: mysql> SELECT CASE 1 WHEN 1 THEN 'one' -> WHEN 2 THEN 'two' ELSE 'more' END; -> 'one' mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END; -> 'true' mysql> SELECT CASE BINARY 'B' -> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END; -> NULL mysql> help case statement CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE statement_list] END CASE Or: CASE WHEN search_condition THEN statement_list [WHEN search_condition THEN statement_list] ... [ELSE statement_list] END CASE

固然case表达式和case语句在性质上纷歧样,可是利用它们的思路是一样的。CASE value WHEN...只能与value举办等同性查抄,case when ... then...则要机动的多。

case operator的利用示例:

MariaDB [test]> select * from Student; +------+----------+------+--------+ | sid | name | age | class | +------+----------+------+--------+ | 1 | chenyi | 22 | Java | | 2 | huanger | 23 | Python | | 3 | zhangsan | 21 | Java | | 4 | lisi | 20 | C# | | 5 | wangwu | 21 | Python | | 6 | zhaoliu | 19 | Java | | 7 | qianqi | 22 | C | | 8 | sunba | 20 | C++ | | 9 | yangjiu | 24 | Java | +------+----------+------+--------+ MariaDB [test]> select name,case when age>21 then 'older' else 'younger' end as oy from Student; +----------+---------+ | name | oy | +----------+---------+ | chenyi | older | | huanger | older | | zhangsan | younger | | lisi | younger | | wangwu | younger | | zhaoliu | younger | | qianqi | older | | sunba | younger | | yangjiu | older | +----------+---------+ 感谢支持织梦之家,你的支持,我们的无限动力!!!
“DEDECMS教程”欢迎分享!:

相关标签:标签(593)语句(11)mysql(22)结构(36)

顶一下
(0)
0%
踩一下
(0)
0%

欢迎您报错,或提出宝贵建议,我们将第一时间处理,为大家营造一个良好网上交流平台,感谢支持织梦之家!

在百度中搜索相关文章:流程节制语织梦仿站句(MySQL/MariaDB )
在谷歌中搜索相关文章:流程节制语织梦仿站句(MySQL/MariaDB )
免费获取专属
《策划方案》及报价

今天已有32名客户获取成功

免费咨询热线

130-7131-2958

获取报价