MySQL存储过程之流程控制

1. 条件分支IF-THEN-ELSE-END IF

 1 CREATE PROCEDURE p12 (IN parameter1 INT)
 2 BEGIN
 3     DECLARE variable1 INT;
 4     SET variable1 = parameter1 + 1;
 5     IF variable1 = 0 THEN
 6         INSERT INTO t VALUES (17);
 7     END IF;
 8     IF parameter1 = 0 THEN
 9         UPDATE t SET s1 = s1 + 1;
10     ELSE
11         UPDATE t SET s1 = s1 + 2;
12     END IF;
13 END; //

2. CASE指令

 1 CREATE PROCEDURE p13 (IN parameter1 INT)
 2 BEGIN
 3     DECLARE variable1 INT;
 4     SET variable1 = parameter1 + 1;
 5     CASE variable1
 6     WHEN 0 THEN
 7         INSERT INTO t VALUES (17);
 8     WHEN 1 THEN
 9         INSERT INTO t VALUES (18);
10     ELSE
11         INSERT INTO t VALUES (19);
12     END CASE;
13 END; // 

3. Loops循环

  1) WHILE...END WHILE

1 CREATE PROCEDURE p14 ()
2 BEGIN  
3     DECLARE v INT;    
4     SET v = 0;  
5     WHILE v < 5 DO  
6         INSERT INTO t VALUES (v);
7         SET v = v + 1;
8     END WHILE;
9 END; // 

  2) REPEAT...END REPEAT

 1 CREATE PROCEDURE p15 ()
 2 BEGIN
 3     DECLARE v INT;
 4     SET v = 0;
 5     REPEAT
 6         INSERT INTO t VALUES (v);
 7         SET v = v + 1;
 8         UNTIL v >= 5    /* 此处引号可省,也可不写 */
 9     END REPEAT;
10 END; //

  3) LOOP...END LOOP

 1 CREATE PROCEDURE p16 ()
 2 BEGIN
 3     DECLARE v INT;
 4     SET v = 0;
 5     loop_label: LOOP
 6         INSERT INTO t VALUES (v);
 7         SET v = v + 1;
 8         IF v >= 5 THEN
 9             LEAVE loop_label;
10         END IF;
11     END LOOP;
12 END; //

  a. LOOP循环与WHILE相似,不需要初始条件,同时又与REPEAT循环一样没有结束条件.在循环开始的loop_label:用于标识该循环,而IF结构里的LEAVE loop_label表示离开循环.

  b. Labels标号可用在BEGIN,WHILE,REPEAT或者LOOP之前,语句标号只能在合法的语句前使用,所以,LEAVE <标号名称>意味着离开与该标号对应的语句或复合语句:

 1 CREATE PROCEDURE p17 ()
 2 label_1: BEGIN
 3     label_2: WHILE 0 = 1 DO
 4         LEAVE label_2;
 5     END  WHILE;
 6     label_3: REPEAT
 7         LEAVE label_3;
 8         UNTIL 0 =0
 9     END REPEAT;
10     label_4: LOOP
11         LEAVE label_4;
12     END LOOP;
13 END; //     

  c. End Labels标号结束符,可以用在在由标号定义的语句结束之后,无功能性作用,只起到说明的作用:

 1 CREATE PROCEDURE p18 ()
 2 label_1: BEGIN
 3     label_2: WHILE 0 = 1 DO
 4         LEAVE label_2;
 5     END  WHILE label_2;
 6     label_3: REPEAT
 7         LEAVE label_3;
 8         UNTIL 0 =0
 9     END REPEAT label_3
10     label_4: LOOP
11         LEAVE label_4;
12     END LOOP  label_4
13 END label_1  //    

  d. LEAVE and Labels:LEAVE语句使程序跳出复杂的复合语句:

 1 CREATE PROCEDURE p19 (parameter1 CHAR)
 2 label_1: BEGIN
 3     label_2: BEGIN
 4         label_3: BEGIN
 5             IF parameter1 IS NOT NULL THEN
 6                 IF parameter1 = ‘a‘ THEN
 7                     LEAVE label_1;
 8                 ELSE
 9                     BEGIN
10                         IF parameter1 = ‘b‘ THEN
11                             LEAVE label_2;
12                         ELSE
13                             LEAVE label_3;
14                         END IF;
15                     END;
16                 END IF;
17             END IF;
18         END;
19     END;
20 END;//

  e. ITERATE迭代:如果目标是迭代语句,就必须用到LEAVE语句,ITERATE和LEAVE语句一样可以在循环内部使用,类似c语言的continue:

 1 CREATE PROCEDURE p20 ()
 2 BEGIN
 3     DECLARE v INT;
 4     SET v = 0;
 5     loop_label: LOOP
 6         IF v = 3 THEN
 7             SET v = v + 1;
 8             ITERATE loop_label;
 9         END IF;
10         INSERT INTO t VALUES (v);
11         SET v = v + 1;
12         IF v >= 5 THEN
13             LEAVE loop_label;
14         END IF;
15     END LOOP;
16 END; // 

  4) GOTO

1 CREATE PROCEDURE p...
2 BEGIN
3     ...
4     LABEL label_name;
5     ...
6     GOTO label_name;
7     ...
8 END;

  虽然不是标准的SQL语句,MySQL的存储过程中仍然可以使用GOTO语句,此处标号的使用与前面不同,出于和其他DBMS兼容,此处用法慢慢被淘汰.

时间: 2024-10-03 15:01:25

MySQL存储过程之流程控制的相关文章

(13)mysql中的流程控制

概述 在mysql中可以使用if/case/loop/leave/iterate/repeat/while语句进行流程控制. if语句 if语句实现条件判断,类似高级语言(c/c++/php/java等)中的if语句. if search_condition then statement_list [elseif search_condition then statement_list]... [else statement_list] end if 举例 if mobile='13911113

MySQL-视图-触发器-事务-存储过程-函数-流程控制-索引与慢查询优化-06

目录 视图*** 什么是视图 为什么要用视图 如何生成视图 修改视图 --> 最好(千万)不要 关联表数据改动前 关联表数据改动之后 触发器 什么是触发器 触发条件 触发器语法结构 修改mysql的默认结束符(;) 触发器死循环 六个触发器的执行时机 新增前.新增后.删除前.删除后.更新前.更新后 NEW对象指代的就是当前记录(对象) 事务 ***** 什么是事务 事务的四大特性 ACID A:原子性 atomicity C:一致性 consistency I:隔离性 isolation D:持

Mysql(10)_存储过程与流程控制

一  存储过程与if语句 -- ---------------------------- -- Procedure structure for `proc_adder` -- ---------------------------- DROP PROCEDURE IF EXISTS `proc_adder`; DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_adder`(IN a int, IN b int, OUT

mysql存储过程、存储函数及流程控制

存储过程 一.基本语法 create procedure sp_name([proc_parameter[,...]]) [characteristic...]routine_body begin end sp_name 表示存储过程的名字 proc_parameter 存储过程参数例表[IN OUT INOUT]三个部分组成 其中IN 表示传进来的参数 其中OUT 表示传出去的参数 其中INOUT 表示传进来但最终传回的参数 routine_body 参数是SQL代码的内容(类似于触发器的fo

mysql流程控制、自定义函数、存储过程

修改结束符dilimiter $$ 分支 if 条件 then 语句 else if 条件 then 语句 else 语句 end if; 循环 while 条件 do 循环体 end while; 用户自定义变量 典型的变量:字段名就是变量,还有一些系统内置的变量 用户自定义变量需要使用 @作为变量名的前缀,用于区分是否是系统内置变量! set 变量名=变量值! //赋值set @height=10; 取值 //select @height; 系统内置函数 rand(),生成随机数的函数,得到

MySQL之视图、触发器、事务、存储过程、函数 流程控制

阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部都做了,也就是说它想要完成一件事,以后想开发的人,例如想写python程序的人,你就专门的写你自己的python程序,以后凡是关于数据的增删改查,全部都在MySQL里面完成,也就是说它想实现一个数据处理与应用程序的一个完全的解耦和状态,比如说,如果我是个应用程序员,我想要查询数据,我不需要自己写sql语句,只需要调用mysql封装好的一些功能,直

mysql基础教程(四)-----事务、视图、存储过程和函数、流程控制

事务 概念 事务由单独单元的一个或多个SQL语句组成,在这 个单元中,每个MySQL语句是相互依赖的.而整个单独单 元作为一个不可分割的整体,如果单元中某条SQL语句一 旦执行失败或产生错误,整个单元将会回滚.所有受到影 响的数据将返回到事物开始以前的状态:如果单元中的所 有SQL语句均执行成功,则事物被顺利执行. 存储引擎 概念 在mysql中的数据用各种不同的技术存储 在文件(或内存)中. 查看 通过 show engines: 来查看mysql支持的存储引擎. 常见引擎 在mysql中用的

MySQL视图、触发器、事务、存储过程、内置函数、流程控制、索引

一.视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view teacher2course as #把下面查询的结果放在视图teacher2course中 select * from teacher inner join course on teacher.tid = course.teacher_id; 注意: 1.视图只有表结构,视图中的数据还是来源于原来的表

mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制

目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发器语法 五.存储过程 六.函数 七.流程控制 八.数据库备份(运维方向) 一.存储引擎 1.什么是存储引擎? mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用exce