MySQL 中控制流程的使用

本文简单介绍在MySQL中如何使用控制流程语句进行流程控制

目录

MySQL支持的控制流程语句

使用IF语句

语法说明

简单示例

创建存储过程

调用存储过程

删除存储过程

使用CASE语句

语法说明

语法格式1

语法格式2

简单示例

创建存储过程1

调用存储过程1

创建存储过程2

调用存储过程2

删除存储过程

使用LOOP语句

语法说明

简单示例

创建存储过程

调用存储过程

删除存储过程

使用LEAVE语句

语法说明

简单示例

使用ITERATE语句

语法说明

简单示例

创建存储过程

调用存储过程

删除存储过程

使用REPEAT语句

语法说明

简单示例

创建存储过程

调用存储过程

删除存储过程

使用WHILE语句

语法说明

简单示例

创建存储过程

调用存储过程

删除存储过程

总结


 

MySQL支持的控制流程语句

MySQL数据库支持使用IF语句、CASE语句、LOOP语句、LEAVE语句、ITERATE语句、REPEAT语句和WHILE语句进行流程的控制。

使用IF语句

语法说明

IF语句能够根据条件判断的结果为TRUE或者FALSE来执行相应的逻辑。

IF语句的语法格式如下:

IF search_condition THEN statement_list
  [ELSEIF search_condition THEN statement_list] ...
  [ELSE statement_list]
END IF

简单示例

创建存储过程

创建一个名称为CompareNumber的存储过程,在存储过程中定义一个INT类型的变量x,并为变量x赋值200。接下来,使用IF语句对x的值进行判断,如果x的值小于200,则输出“x < 200”;如果x的值等于200,则输出“x = 200”;如果x的值大于200,则输出“x >200”。

在MySQL命令行中执行代码:

mysql>DELIMITER $$
mysql> CREATE PROCEDURE CompareNumber()
  BEGIN
  DECLARE x INT DEFAULT 0;
  SET x = 200;
  IF x < 200 THEN
  SELECT 'x < 200';
  ELSEIF x = 200 THEN
  SELECT 'x = 200';
  ELSE 
  SELECT 'x > 200';
  END IF;
  END $$
Query OK, 0 rows affected (0.13 sec)

mysql> DELIMITER;

调用存储过程

在MySQL命令行中调用名称为CompareNumber的存储过程。

mysql> CALL CompareNumber();
+---------+
| x = 200 |
+---------+
| x = 200 |
+---------+
1 row in set (0.04 sec)

Query OK, 0 rows affected (0.00 sec)

在CompareNumber的存储过程中,为变量x赋值100,通过IF语句判断,输出了“x = 100”。

删除存储过程

删除创建的存储过程,在MySQL命令行中执行以下代码:

mysql> DROP PROCEDURE CompareNumber;
Query OK, 0 rows affected (0.07 sec)

使用CASE语句

语法说明

CASE语句有两种语法格式。

语法格式1
CASE case_value
  WHEN when_value THEN statement_list
  [WHEN when_value THEN statement_list] ...
  [ELSE statement_list]
END CASE

其中,case_value表示条件表达式,根据case_value的值,执行相应的WHEN语句。when_value为case_value可能的值,如果某个when_value的值与case_value的值相同,则会执行当前when_value对应的THEN后面的statement_list语句;如果没有when_value的值与case_value的值相同,则执行ELSE语句对应的statement_list语句。

语法格式2
CASE
  WHEN search_condition THEN statement_list
  [WHEN search_condition THEN statement_list] ...
  [ELSE statement_list]
END CASE

其中,search_condition为条件判断语句,当某个search_condition语句为TRUE时,执行对应的THEN后面的statement_list语句;如果search_condition语句都为FALSE,则执行ELSE对应的statement_list语句。

简单示例

创建存储过程1

创建名称为CompareNumberWithCaseValue的存储过程,

使用CASE语句语法格式1,对变量x的值进行判断,并输出相应的信息。

在MySQL命令行中执行代码:

mysql> DELIMITER $$
mysql>  CREATE PROCEDURE CompareNumberWithCaseValue()
   BEGIN
   DECLARE x INT DEFAULT 0;
   SET x = 200;
   CASE x
   WHEN 0 THEN SELECT 'x = 0';
   WHEN 200 THEN SELECT 'x = 200';
   ELSE SELECT 'x <> 0 and x <> 200';
   END CASE;
   END $$
Query OK, 0 rows affected (0.03 sec)

mysql> DELIMITER;

调用存储过程1

名称为CompareNumberWithCaseValue的存储过程创建成功。接下来,在MySQL命令行中调用名称为CompareNumberWithCaseValue的存储过程。

mysql> CALL CompareNumberWithCaseValue();
+---------+
| x = 200 |
+---------+
| x = 200 |
+---------+
1 row in set (0.06 sec)

Query OK, 0 rows affected (0.00 sec)

在存储过程CompareNumberWithCaseValue中,将变量x设置为100,根据CASE语句条件的判断,输出了“x = 100”的信息。

创建存储过程2

创建名称为CompareNumberWithCase的存储过程,使用CASE语句语法格式2,对变量x的值进行判断并输出相应的信息。

在MySQL命令行中执行代码:

mysql> DELIMITER $$
mysql> CREATE PROCEDURE CompareNumberWithCase()
   BEGIN
   DECLARE x INT DEFAULT 0;
   SET x = 200;
   CASE
   WHEN x < 200 THEN SELECT 'x < 200';
   WHEN x = 200 THEN SELECT 'x = 200';
   WHEN x > 200 THEN SELECT 'x > 200';
   ELSE SELECT 'x NOT FOUND';
   END CASE;
   END $$
Query OK, 0 rows affected (0.04 sec)

mysql> DELIMITER;

调用存储过程2

名称为CompareNumberWithCase的存储过程创建成功。

在MySQL命令行中调用名称为CompareNumberWithCase的存储过程。

mysql> CALL CompareNumberWithCase();
+---------+
| x = 200 |
+---------+
| x = 200 |
+---------+
1 row in set (0.05 sec)

Query OK, 0 rows affected (0.00 sec)

名称为CompareNumberWithCase的存储过程同样输出了“x = 100”的信息。

删除存储过程

删除上述创建的两个存储过程,命令如下:

mysql> DROP PROCEDURE CompareNumberWithCaseValue;
Query OK, 0 rows affected (0.07 sec)

mysql> DROP PROCEDURE CompareNumberWithCase;
Query OK, 0 rows affected (0.05 sec)

使用LOOP语句

LOOP语句能够循环执行某些语句,而不进行条件判断,

可以使用LEAVE语句退出LOOP循环。

语法说明

LOOP语句的语法格式如下:

 [begin_label:] LOOP
  statement_list
END LOOP [end_label]

其中,begin_label和end_label都是LOOP语句的标注名称,该参数可以省略。

如果begin_label和end_label两者都出现,则它们必须是相同的。

简单示例

创建存储过程

创建名称为HandlerDataWithLoop的存储过程,在存储过程中定义INT类型的变量x,默认值为0,使用LOOP语句为x变量循环加1,当x变量的值大于等于200时,退出LOOP循环,最后输出x的值。

在MySQL命令行中执行代码:

mysql> DELIMITER $$
mysql> CREATE PROCEDURE HandlerDataWithLoop()
   BEGIN
   DECLARE x INT DEFAULT 0;
   x_loop: LOOP
   SET x = x + 1;
   IF x >= 200 THEN 
   LEAVE x_loop;
   END IF;
   END LOOP x_loop;
   SELECT x;
   END $$
Query OK, 0 rows affected (0.05 sec)

mysql> DELIMITER;

名称为HandlerDataWithLoop的存储过程创建成功。

调用存储过程

在MySQL命令行中调用名称为HandlerDataWithLoop的存储过程。

mysql> CALL HandlerDataWithLoop();
+-----+
| x   |
+-----+
| 200 |
+-----+
1 row in set (0.04 sec)

Query OK, 0 rows affected (0.00 sec)

删除存储过程

删除上述创建的存储过程,命令如下:

mysql> DROP PROCEDURE HandlerDataWithLoop;
Query OK, 0 rows affected (0.09 sec)

使用LEAVE语句

语法说明

LEAVE语句能够从被标注的流程结果中退出,语法结构如下:

LEAVE label

其中,label表示被标注的流程标志。

简单示例

参见LOOP语句控制流程中的简单示例,这里不再赘述。

使用ITERATE语句

语法说明

ITERATE语句表示跳过本次循环,而执行下次循环操作。

语法格式如下:

ITERATE label

其中,label表示被标注的流程标志。

注意:ITERATE只可以出现在LOOP、REPEAT和WHILE语句内。

简单示例

创建存储过程

创建名称为HandlerDataWithIterate的存储过程,

在存储过程中定义INT类型的变量x,默认值为0。

接下来,在LOOP循环中为变量x加1,当x的值小于5时,执行ITERATE操作;

当x的值大于等于8时,退出LOOP循环;其他情况,打印x变量的值。

在MySQL命令行中执行代码:

mysql> DELIMITER $$
mysql> CREATE PROCEDURE HandlerDataWithIterate()
   BEGIN
   DECLARE x INT DEFAULT 0;
   x_loop: LOOP
   SET x = x + 1;
   IF x < 5 THEN ITERATE x_loop;
   ELSEIF x >= 8 THEN LEAVE x_loop;
   END IF;
   SELECT x;
   END LOOP x_loop;
   END $$
Query OK, 0 rows affected (0.11 sec)

mysql> DELIMITER ;

调用存储过程

在MySQL命令行中调用名称为HandlerDataWithIterate的存储过程。

mysql> CALL HandlerDataWithIterate();
+---+
| x |
+---+
| 5 |
+---+
1 row in set (0.02 sec)

+---+
| x |
+---+
| 6 |
+---+
1 row in set (0.05 sec)

+---+
| x |
+---+
| 7 |
+---+
1 row in set (0.08 sec)

Query OK, 0 rows affected (0.00 sec)

当x变量的值大于等于5且小于8时,输出了x变量的值。

删除存储过程

删除上述创建的存储过程,在MySQL命令行执行以下代码:

mysql> DROP PROCEDURE HandlerDataWithIterate;
Query OK, 0 rows affected (0.05 sec)

使用REPEAT语句

语法说明

REPEAT语句会创建一个带有条件判断的循环语句,

每次执行循环体时,都会对条件进行判断,如果条件判断为TRUE,则退出循环,

否则继续执行循环体,语法格式如下:

[begin_label:] REPEAT
  statement_list
UNTIL search_condition
END REPEAT [end_label]

其中begin_label和end_label为循环的标志,二者可以省略,如二者同时出现,则必须相同。当search_condition条件判断为TRUE时,退出循环。

简单示例

创建存储过程

创建名称为HandlerDataWithRepeat的存储过程,在存储过程中定义INT类型的变量x,默认值为0。在REPEAT循环中为x变量加1,如果x变量的值大于等于10,则退出REPEAT循环,最后打印x变量的值。

在MySQL命令行中执行代码:

mysql> DELIMITER $$
mysql>CREATE PROCEDURE HandlerDataWithRepeat()
   BEGIN
   DECLARE x INT DEFAULT 0;
   x_repeat: REPEAT
   SET x = x + 1;
   UNTIL x >= 10
   END REPEAT x_repeat;
   SELECT x;
   END $$
Query OK, 0 rows affected (0.06 sec)

mysql> DELIMITER ;

调用存储过程

在MySQL命令行中调用名称为HandlerDataWithRepeat的存储过程。

mysql> CALL HandlerDataWithRepeat();
+----+
| x  |
+----+
| 10 |
+----+
1 row in set (0.02 sec)
Query OK, 0 rows affected (0.00 sec)

存储过程通过REPEAT循环处理,正确地输出了x变量的值。

删除存储过程

删除上述创建的存储过程,在MySQL命令行中执行以下代码:

mysql> DROP PROCEDURE HandlerDataWithRepeat;
Query OK, 0 rows affected (0.10 sec)

使用WHILE语句

语法说明

WHILE语句同样可以创建一个带有条件判断的循环语句。

与REPEAT语句不同,WHILE语句的条件判断为TRUE时,继续执行循环体。

语法格式如下:

[begin_label:] WHILE search_condition DO
  statement_list
END WHILE [end_label]

其中begin_label和end_label为循环的标志,二者可以省略,如二者同时出现,则必须相同。当search_condition条件判断为TRUE时,继续执行循环体。

简单示例

创建存储过程

创建一个名称为HandlerDataWithWhile的存储过程,

在存储过程中定义一个INT类型的变量x,默认值为0。

当x的值小于10时,使用WHILE循环对x变量的值加1,最后打印x变量的值。

在MySQL命令行中执行代码:

mysql> DELIMITER $$
mysql> CREATE PROCEDURE HandlerDataWithWhile()
   BEGIN
   DECLARE x INT DEFAULT 0;
   x_while: WHILE x < 10 DO
   SET x = x + 1;
   END WHILE x_while;
   SELECT x;
   END $$
Query OK, 0 rows affected (0.09 sec)

mysql> DELIMITER ;

名称为HandlerDataWithWhile的存储过程创建成功。

调用存储过程

在MySQL命令行中调用名称为HandlerDataWithWhile的存储过程。

mysql> CALL HandlerDataWithWhile();
+----+
| x  |
+----+
| 10 |
+----+
1 row in set (0.03 sec)
Query OK, 0 rows affected (0.00 sec)

在存储过程中通过WHILE循环对x变量的值进行处理,并正确输出了x变量的值。

删除存储过程

删除上述创建的存储过程,在MySQL命令行中执行以下代码:

mysql> DROP PROCEDURE HandlerDataWithWhile;
Query OK, 0 rows affected (0.09 sec)

总结

本文简单介绍在MySQL中如何使用控制流程语句进行流程控制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值