• MySQL:流程控制结构


    流程控制语句

    顺序结构

      程序自上往下依次执行

    分支结构

    介绍

      程序从两条或多条路径中选择一条执行

    if语句

    /*
    语法:
    IF(表达式1,表达式2,表达式3)
    执行顺序:
       如果表达式1成立,则返回表达式2的值,否则返回表达式3的值
    
    应用:在任何地方 
    */

    IF  THEN

    /*
    语法:
        IF         条件1 THEN 语句1;
        ELSEIF  条件2  THEN 语句2;
        ...
        ELSE 语句n;
        END IF;
    
    应用在begin end中
    */

    case

    /*
    情景1: 类似switch语句,实现等值判断
    CASE 变量|表达式|字段
    WHEN 要判断的值 THEN 返回值1或语句1;
    WHEN 要判断的值 THEN 返回值2或语句2;
    ...
    ELSE 要返回的值n或语句n;
    END CASE;
    
    情景2: 类似多重if语句,实现区间判断
    CASE
    WHEN 要判断的条件1 THEN 返回值1或语句1;
    WHEN 要判断的条件2 THEN 返回值2或语句2;
    ...
    ELSE 要返回的值n或语句n;
    END CASE;
    
    特点:
       可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,BEGIN END里面或者外面;
       可以作为独立的语句去使用,只能放在BEGIN ENG中;
       如果WHEN中的值满足或条件成立,则执行对应的THEN后面的语句,并结束CASE;
       ELSE可以省略,如果else省略了,并且所有的WEHN条件都不满足,则返回NULL;
    */

    循环结构

    介绍

      程序在满足一定条件的基础上,重复执行一段代码

    循环控制

    • iterate类似于continue,结束本次循环,继续下一次
    • leave 类似于break,结束当前所在的循环

    while

    /*
    语法:
        【标签:】 while 循环条件 do
                      循环体;
                      end while [标签];
    */

    loop

    /*
    语法:
        【标签:】 loop
                      循环体;
                      end loop[标签];
    用来模拟死循环
    */

    repeat

    /*
    语法:
        【标签:】  repeat
                      循环体;
                      until 结束循环的条件
                      end repeat [标签];
    */

    案例

    #1.没有添加循环控制语句
    #案例:批量插入,根据次数插入到admin表中多条记录
    DROP PROCEDURE pro_while1$
    CREATE PROCEDURE pro_while1(IN insertCount INT)
    BEGIN
        DECLARE i INT DEFAULT 1;
        WHILE i<=insertCount DO
            INSERT INTO admin(username,`password`) VALUES(CONCAT('Rose',i),'666');
            SET i=i+1;
        END WHILE;
        
    END $
    CALL pro_while1(100)$
    
    #2.添加leave语句
    #案例:批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止
    TRUNCATE TABLE admin$
    DROP PROCEDURE test_while1$
    CREATE PROCEDURE test_while1(IN insertCount INT)
    BEGIN
        DECLARE i INT DEFAULT 1;
        a:WHILE i<=insertCount DO
            INSERT INTO admin(username,`password`) VALUES(CONCAT('xiaohua',i),'0000');
            IF i>=20 THEN LEAVE a;
            END IF;
            SET i=i+1;
        END WHILE a;
    END $
    CALL test_while1(100)$
    
    #3.添加iterate语句
    #案例:批量插入,根据次数插入到admin表中多条记录,只插入偶数次
    TRUNCATE TABLE admin$
    DROP PROCEDURE test_while1$
    CREATE PROCEDURE test_while1(IN insertCount INT)
    BEGIN
        DECLARE i INT DEFAULT 0;
        a:WHILE i<=insertCount DO
            SET i=i+1;
            IF MOD(i,2)!=0 THEN ITERATE a;
            END IF;
            
            INSERT INTO admin(username,`password`) VALUES(CONCAT('xiaohua',i),'0000');
            
        END WHILE a;
    END $
    
    
    CALL test_while1(100)$

     案例

    /*一、已知表stringcontent
    其中字段:
    id 自增长
    content varchar(20)
    
    向该表插入指定个数的,随机的字符串
    */
    DROP TABLE IF EXISTS stringcontent;
    CREATE TABLE stringcontent(
        id INT PRIMARY KEY AUTO_INCREMENT,
        content VARCHAR(20)
        
    );
    DELIMITER $
    CREATE PROCEDURE test_randstr_insert(IN insertCount INT)
    BEGIN
        DECLARE i INT DEFAULT 1;
        DECLARE str VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
        DECLARE startIndex INT;#代表初始索引
        DECLARE len INT;#代表截取的字符长度
        WHILE i<=insertcount DO
            SET startIndex=FLOOR(RAND()*26+1);#代表初始索引,随机范围1-26
            SET len=FLOOR(RAND()*(20-startIndex+1)+1);#代表截取长度,随机范围1-20-startIndex+1INSERT INTO stringcontent(content) VALUES(SUBSTR(str,startIndex,len));
            SET i=i+1;
        END WHILE;
    
    END $
    
    CALL test_randstr_insert(10)$

  • 相关阅读:
    mac必备软件
    gradle下的第一个SpringMVC应用
    解决mac安装homebrew后报错-bash: brew: command not found
    IDEA Tomcat部署时war和war exploded区别以及平时踩得坑
    spring boot application.properties基本配置
    netty之LengthFieldBasedFrameDecoder解码器
    Github命令说明
    gradle多项目 svn依赖
    IDEA快捷键
    xeno 实时性能测试 系统时钟1秒100个tick再测试
  • 原文地址:https://www.cnblogs.com/gareth-yu/p/13964093.html
Copyright © 2020-2023  润新知