• 【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);
    
  • 相关阅读:
    237. Delete Node in a Linked List
    430. Flatten a Multilevel Doubly Linked List
    707. Design Linked List
    83. Remove Duplicates from Sorted List
    160. Intersection of Two Linked Lists
    426. Convert Binary Search Tree to Sorted Doubly Linked List
    142. Linked List Cycle II
    类之间的关系
    初始化块
    明确类和对象
  • 原文地址:https://www.cnblogs.com/mindzone/p/13924710.html
Copyright © 2020-2023  润新知