流程控制

分支

一、if函数
    语法:if(条件,值1,值2)
    特点:可以用在任何位置

二、case语句

语法:

    情况一:类似于switch
    case 表达式
    when 值1 then 结果1或语句1(如果是语句,需要加分号) 
    when 值2 then 结果2或语句2(如果是语句,需要加分号)
    ...
    else 结果n或语句n(如果是语句,需要加分号)
    end 【case】(如果是放在begin end中需要加上case,如果放在select后面不需要)

    情况二:类似于多重if
    case 
    when 条件1 then 结果1或语句1(如果是语句,需要加分号) 
    when 条件2 then 结果2或语句2(如果是语句,需要加分号)
    ...
    else 结果n或语句n(如果是语句,需要加分号)
    end 【case】(如果是放在begin end中需要加上case,如果放在select后面不需要)


特点:
    可以用在任何位置

三、if elseif语句

语法:

    if 情况1 then 语句1;
    elseif 情况2 then 语句2;
    ...
    else 语句n;
    end if;

特点:
    只能用在begin end中!!!!!!!!!!!!!!!


三者比较:

    应用场合:
    if函数        简单双分支
    case结构  等值判断 的多分支
    if结构        区间判断 的多分支

循环

循环控制:
    ITERATE类似于CONTINUE,继续,结束本次循环,继续下一次
    LEAVE 类似于BREAK,跳出,结束当前所在循环
    
语法:
    【标签:】WHILE 循环条件  DO
        循环体
    END WHILE 【标签】;
    
特点:

    只能放在BEGIN END里面

    如果要搭配leave跳转语句,需要使用标签,否则可以不用标签

    leave类似于java中的break语句,跳出所在循环!!!
    
Eg.
    #1.WHILE
    /*
    语法:
    【标签:】WHILE 循环条件 DO
            循环体
    END WHILE【标签】;
    */
    
    #2.LOOP
    /*
    语法:
    【标签:】LOOP
            循环体
    END LOOP【标签】;
    可以用来模拟简单的死循环
    */
    
    #3.REPEAT
    /*
    语法:
    【标签:】REPEAT
            循环体;
    UNTIL 结束循环的条件
    END REPAIR 【标签】;
    */
    
    #1.没有添加循环控制语句
    #案例:批量插入,根据次数插入到admin表中多条记录
    CREATE PROCEDURE pro_while1(IN insertCount INT)
    BEGIN
        DECLARE i  INT DEFAULT 1;
        WHILE i<=insetCount DO
            INSERT INTO admin(username,`password`) VALUES('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 insetCount INT)
    BEGIN
        DECLARE i INT DEFAULT 1;
        a:WHILE i<=insetCount   DO
        INSERT INTO admin(username,`password`) VALUES(CONCAT('xiaohua',i), '1000');
        IF i>=20 THEN LEAVE a;
        END IF;
        SET i=i+1;
    END WHILE;
    END $
    CALL test_while1(100)$
    
    #3.添加iterate语句
    #案例:批量插入,根据次数插入到admin表中多条记录,只插入偶数次
    TRUNCATE TABLE admin$
    DROP PROCEDURE test_while1$
    CREATE PROCEDURE test_while1(IN insetCount INT)
    BEGIN
        DECLARE i INT DEFAULT 1;
        a:WHILE i<=insetCount   DO
        SET i=i+1;
        IF MOD(i,2) != 0 THEN ITERATE a;
        END IF;
        INSERT INTO admin(username,`password`) VALUES(CONCAT('xiaohua',i), '1000');
    END WHILE;
    END $
    CALL test_while1(100)$
    
    案例:
    /*
    已知表stringcontent
    其中字段:
    id 自增长
    content varchar(20)
    向表中插入指定个数的随机字符串
    */
    DROP TABLE IF EXISTS stringcontent;
    CREATE TABLE stringconten(
        id INT PRIMARY KEY auto_increment;
        content VARCHAR(20)
    );
    
    DELIMITER $
    CREATE PROCEDURE test_randstr_insert(IN insertCount INT)
    BEGIN
        DECLARE i INT DEFAULT 1;#定义一个循环变量i,表示插入次数
        DECLARE str VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
        DECLARE startIndex INT DEFAULT 1;#代表起始索引
        DECLARE len INT DEFAULT 1;#代表截取的字符长度
        WHILE i<=insertCount DO
                SET len = FLOOR(RAND()*(20-startIndex+1)+1);#产生一个随机整数,代表截取长度
                SET startIndex = FLOOR(RAND()*26+1);#产生一个随机整数,代表起始索引1-26
                INSERT INTO stringcontent(content) VALUES(SUBSTR(str,startIndex,len));
                SET i=i+1;#循环变量更新
    END WHILE;
    END $

你可能感兴趣的:(流程控制)