zoukankan      html  css  js  c++  java
  • 【DataBase】MySQL 28 流程控制

    一、分支结构

    1、IF函数

    语法:

    IF(表达式1, 表达式2, 表达式3)  

    类似三元运算符,表达式1返回True Or False

    True执行表达式2,False执行表达式3

    IF实现多分枝结构

    IF 条件 THEN 语句;
    ELSEIF 条件 THEN 语句;
    ELSEIF 条件 THEN 语句;
    ... ...
    ELSE 语句;
    END IF;
    

    只能应用在BEGIN & END 中

    2、CASE结构

    用于等值判断处理,也可以多判断处理

    CASE 变量、字段、函数、表达式
    WHEN 要判断的值1 THEN 返回值1或者语句 WHEN 要判断的值2 THEN 返回值2或者语句 WHEN 要判断的值3 THEN 返回值3或者语句 ... ... ELSE 返回值N或者语句
    END

    不是等值判断,以条件判断的语法:

    CASE 
    
    WHEN 条件1 THEN 返回值1或者语句
    WHEN 条件2 THEN 返回值2或者语句
    WHEN 条件3 THEN 返回值3或者语句
    ... ...
    ELSE 返回值N或者语句
    
    END
    

    二、分支案例:

    成绩分级

    DELIMITER $
    
    CREATE PROCEDURE scoreCase(IN score INT);
    BEGIN
    	CASE
    	WHEN score >= 90 AND score <= 100 THEN SELECT 'A';
    	WHEN score >= 80 THEN SELECT 'B';
    	WHEN score >= 60 THEN SELECT 'C';
    	ELSE SELECT 'D';
    	END CASE;
    END $

    调用

    CALL scoreCase(77);

    使用多重IF

    DELIMITER $
    
    CREATE FUNCTION scoreByIf(score INT) RETURNS CHAR
    BEGIN
    	IF score >= 90 AND score <= 100 THEN RETURN 'A';
    	ELSEIF score >= 80 THEN RETURN 'B';
    	ELSEIF score >= 60 THEN RETURN 'C';
    	ELSE RETURN 'D';
    	END IF;
    END $

    调用

    SELECT scoreByIf(80) 

    三、循环结构

    三种循环类型:

    WHILE、LOOP、REPEAT

    循环控制:

    iterate == continue 继续,结束本次循环,进入下一次循环
    leave == break ,跳出当前的循环

    WHILE语法:

    [标签 :] WHILE 循环条件 DO
        循环体内的逻辑
    END WHILE [标签];
    

    LOOP语法:

    [标签 :] LOOP 
        循环体内的逻辑
    END LOOP[标签];

    REPEAT语法:

    [标签 :] REPEAT
        循环体内的逻辑
    UTIL 结束循环的条件
    END REPEAT [标签];

    四、循环案例:

    批量插入ADMIN表中

    DELIMITER $;
    CREATE PROCEDURE batchByWhile(IN insertCount INT)
    BEGIN
    	DECLARE i INT DEFAULT 1;
    	
    	WHILE i <= insertCount DO
    		INSERT INTO admin(`username`,`password`) VALUES('AAAA','1122');
    		SET i = i + 1;
    	END WHILE;
    END 

    调用

    CALL batchByWhile(777);

     带标签的处理:

    TRUNCATE admin;
    
    DELIMITER $;
    CREATE PROCEDURE batchByWhile2(IN insertCount INT)
    BEGIN
    	DECLARE i INT DEFAULT 1;
    	
    	r1:WHILE i <= insertCount DO
    		INSERT INTO admin(`username`,`password`) VALUES('AAAA','1122');
    		IF i >= 30 THEN LEAVE r1;
    		END IF;
    		SET i = i + 1;
    	END WHILE r1;
    END $

    调用:

    CALL batchByWhile2(100);
    

    使用迭代处理:

    DELIMITER $;
    CREATE PROCEDURE batchByWhile3(IN insertCount INT)
    BEGIN
    	DECLARE i INT DEFAULT 1;
    	
    	r1:WHILE i <= insertCount DO
    		SET i = i + 1;
    		IF MOD(i, 2) != 0 THEN ITERATE r1;
    		END IF;
    		INSERT INTO admin(`username`,`password`) VALUES('AAAA','1122');
    	END WHILE r1;
    END $

    调用

    CALL batchByWhile3(222);
    
  • 相关阅读:
    20171117-构建之法:现代软件工程-阅读笔记
    《团队-爬取豆瓣Top250-团队一阶段互评》
    团队-爬虫豆瓣top250项目-开发文档
    结对编程总结
    结对编程项目总结
    结对-贪吃蛇游戏-开发环境搭建过程
    结对贪吃蛇 结对编项目设计文档
    课后作业 阅读任务 阅读提问4
    课后作业 阅读任务 阅读提问3
    课后作业 现代软件工程 阅读笔记
  • 原文地址:https://www.cnblogs.com/mindzone/p/13924710.html
Copyright © 2011-2022 走看看