MySQL基础(二十一)——流程控制结构

本篇文章主要是对MySQL学习时的一些总结,作为学习笔记记录。

数据来源

数据部分来自于b站尚硅谷MySQL课程

流程控制结构

与C/C++中的流程控制结构类似,Mysql中也有流程控制结构,主要分为顺序结构、分支结构、循环结构。

分支结构

if函数

IF(CONDITION,expr1,expr2)
  • if函数能够实现双分支
  • 应用在begin end中或外面

case结构

CASE 变量或表达式
WHEN val1 THEN expr1;
WHEN val2 THEN expr2;
......
ELSE exprn;
END

CASE
WHEN condition1 THEN expr1;
WHEN condition2 THEN expr2;
......
ELSE exprn;
END
  • 应用在begin end块中或外面

if结构

IF condition1 THEN expr1;
ELSEIF condition2 THEN expr2;
......
ELSE exprn;
END IF;
  • 功能上有点类似于多重if
  • 只能应用在begin end块中

主要操作

#案例1:创建函数,实现传入成绩,如果成绩>90,返回A,如果成绩>80,返回B,如果成绩>60,返回C,否则返回D
CREATE FUNCTION f1 (score INT) RETURNS CHAR 
BEGIN
  DECLARE ch CHAR DEFAULT 'A' ;

  IF score > 90 THEN SET ch = 'A' ;
  ELSEIF score > 80 THEN SET ch = 'B' ;
  ELSEIF score > 60 THEN SET ch = 'C' ;
  ELSE SET ch = 'D' ;
  END IF ;
  
  RETURN ch ;

END $

#调用
SELECT f1(85)$


#案例2:创建存储过程,如果工资<2000,则删除,如果5000>工资>2000,则涨工资1000,否则涨工资500
CREATE PROCEDURE p1 (IN sal DOUBLE) 
BEGIN
  IF sal < 2000 THEN DELETE FROM employees WHERE salary = sal ;
  ELSEIF sal BETWEEN 2000 AND 5000 THEN UPDATE employees SET salary = salary + 1000 WHERE salary = sal ;
  ELSE UPDATE employees SET salary = salary + 500 WHERE salary = sal ;
  END IF ;

END $

#调用
call p1(8300)$


#案例3:创建函数,实现传入成绩,如果成绩>90,返回A,如果成绩>80,返回B,如果成绩>60,返回C,否则返回D
CREATE FUNCTION f2(score INT) RETURNS CHAR
BEGIN

  DECLARE ch CHAR DEFAULT 'A';

  CASE
  WHEN score > 90 THEN SET ch = 'A';
  WHEN score > 80 THEN SET ch = 'B';
  WHEN score > 60 THEN SET ch = 'C';
  ELSE SET ch = 'D';
  END CASE;

  RETURN ch;

END $

#调用
SELECT f2(85)$

循环结构

  • 循环结构主要分为while、loop、repeat等结构,也包括循环控制语句:
    • iterate:类似于continue,结束本次循环,继续下一次循环
    • leave:类似于break,跳出循环,结束当前所在的循环

while

[lable:] WHILE loop_condition DO
loop_body;
END WHILE [ lable ] ;

loop

[lable:] LOOP
loop_body;
END LOOP [ lable ] ;

使用loop可以模拟简单的死循环

repeat

[lable:] REPEAT
loop_body;
UNTIL loop_end_condition 
END REPEAT [ lable ] ;

主要操作

没有添加循环控制语句

#案例:批量插入,根据次数插入到admin表中多条记录
CREATE PROCEDURE while_info (IN num INT) 
BEGIN
  DECLARE i INT DEFAULT 1 ;
  
  WHILE i <= num DO
    INSERT INTO admin(username,PASSWORD) VALUES(CONCAT('tom',i),'123');
    SET i = i + 1;
  END WHILE;

END $

#调用
CALL while_info (10) $

添加leave语句

#案例:批量插入,根据次数插入到admin表中多条记录,如果次数>5则停止
CREATE PROCEDURE leave_info (IN num INT) 
BEGIN
  DECLARE i INT DEFAULT 1 ;

  a:WHILE i < num DO
    INSERT INTO admin(username,PASSWORD) VALUES(CONCAT('tom',i),'123');
    IF i >= 5 THEN LEAVE a;
    END IF;
    SET i = i + 1;

  END WHILE a;

END $

#调用
CALL leave_info(10) $

添加iterate语句

#案例:批量插入,根据次数插入到admin表中多条记录,只插入奇数次
CREATE PROCEDURE ITERATE_info(IN num INT)
BEGIN

  DECLARE i INT DEFAULT 1;
  a:WHILE i <= num DO
    SET i = i + 1;
    IF MOD(i,2) = 0 THEN ITERATE a;
    END IF;

    INSERT INTO admin(username,PASSWORD) VALUES(CONCAT('tom',i),'123');

  END WHILE a;

END $

#调用
CALL iterate_info(10)$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值