流程控制

分支

一、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 $
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容