MySQL學(xué)習之流程控制

前言、流程控制結(jié)構(gòu)

順序結(jié)構(gòu):程序從上往下順序執(zhí)行
分支結(jié)構(gòu):程序從兩條或者多條路徑中選擇一條執(zhí)行
循環(huán)結(jié)構(gòu):程序在滿足一定條件的基礎(chǔ)上蕾哟,重復(fù)執(zhí)行一段代碼

一一忱、分支結(jié)構(gòu)

1-1、if函數(shù)
語法:
    if(條件谭确,值1帘营,值2)

特點:
    可以用在任何位置
1-2、case結(jié)構(gòu)
語法:
    情況一:類似于switch
    case 表達式
    when 值1 then 結(jié)果1或語句1(如果是語句逐哈,需要加分號) 
    when 值2 then 結(jié)果2或語句2(如果是語句芬迄,需要加分號)
    ...
    else 結(jié)果n或語句n(如果是語句,需要加分號)
    end 【case】(如果是放在begin end中需要加上case昂秃,如果放在select后面不需要)

    情況二:類似于多重if
    case 
    when 條件1 then 結(jié)果1或語句1(如果是語句禀梳,需要加分號) 
    when 條件2 then 結(jié)果2或語句2(如果是語句择诈,需要加分號)
    ...
    else 結(jié)果n或語句n(如果是語句,需要加分號)
    end 【case】(如果是放在begin end中需要加上case出皇,如果放在select后面不需要)

特點:
    可以用在任何位置
1-3、if elseif結(jié)構(gòu)
語法:
    if 情況1 then 語句1;
    elseif 情況2 then 語句2;
    ...
    else 語句n;
    end if;

特點:
    只能用在begin end中;└辍=妓摇!NㄒАI醋ⅰ!5ㄒ取D!J裾恰O规摇!:窳Q踉妗!
1-4别垮、三者的比較
三者比較:
                  應(yīng)用場合
    if函數(shù)          簡單雙分支
    case結(jié)構(gòu)        等值判斷 的多分支
    if結(jié)構(gòu)          區(qū)間判斷 的多分支

二便监、分支結(jié)構(gòu)案例

#案例1:創(chuàng)建函數(shù),實現(xiàn)傳入成績碳想,如果成績>90,返回A烧董,如果成績>80,返回B,如果成績>60,返回C胧奔,否則返回D
DELIMITER $
CREATE FUNCTION test_if(score FLOAT) RETURNS CHAR
BEGIN
    DECLARE ch CHAR DEFAULT 'A';
    IF score>90 THEN SET ch='A';
    ELSEIF score>80 THEN SET ch='B';
    ELSEIF score>60 THEN SET ch='C';
    ELSE SET ch='D';
    END IF;
    RETURN ch;
END $

SELECT test_if(87)

#案例2:創(chuàng)建存儲過程逊移,如果工資<2000,則刪除,如果5000>工資>2000,則漲工資1000葡盗,否則漲工資500
DELIMITER $
CREATE PROCEDURE test_if_pro(IN sal DOUBLE)
BEGIN
    IF sal<2000 THEN DELETE FROM employees WHERE employees.salary=sal;
    ELSEIF sal>=2000 AND sal<5000 THEN UPDATE employees SET salary=salary+1000 WHERE employees.`salary`=sal;
    ELSE UPDATE employees SET salary=salary+500 WHERE employees.`salary`=sal;
    END IF;
END $

CALL test_if_pro(2100)

#案例3:創(chuàng)建函數(shù)螟左,實現(xiàn)傳入成績,如果成績>90,返回A觅够,如果成績>80,返回B胶背,如果成績>60,返回C,否則返回D
CREATE FUNCTION test_case(score FLOAT) RETURNS CHAR
BEGIN 
    DECLARE ch CHAR DEFAULT 'A';
    
    CASE 
    WHEN score>90 THEN SET ch='A';
    WHEN score>80 THEN SET ch='B';
    WHEN score>60 THEN SET ch='C';
    ELSE SET ch='D';
    END CASE;
    
    RETURN ch;
END $

SELECT test_case(56)

三喘先、循環(huán)結(jié)構(gòu)

分類:
while钳吟、loop、repeat

循環(huán)控制:
iterate 類似于 continue窘拯,繼續(xù)红且,結(jié)束本次循環(huán)坝茎,繼續(xù)下一次
leave 類似于 break,跳出暇番,結(jié)束當前所在的循環(huán)

3-1嗤放、while循環(huán)
語法:

【標簽:】while 循環(huán)條件 do
    循環(huán)體;
end while【 標簽】;

聯(lián)想:

while(循環(huán)條件){
    循環(huán)體;
}
3-2、loop循環(huán)
語法:

【標簽:】loop
    循環(huán)體;
end loop 【標簽】;

可以用來模擬簡單的死循環(huán)
3-3壁酬、repeat循環(huán)
語法:

【標簽:】repeat
    循環(huán)體;
until 結(jié)束循環(huán)的條件
end repeat 【標簽】;

四次酌、循環(huán)結(jié)構(gòu)案例

#1.沒有添加循環(huán)控制語句
#案例:批量插入,根據(jù)次數(shù)插入到admin表中多條記錄
DELIMITER $
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語句
#案例:批量插入舆乔,根據(jù)次數(shù)插入到admin表中多條記錄岳服,如果次數(shù)>20則停止
DELIMITER $
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語句
#案例:批量插入,根據(jù)次數(shù)插入到admin表中多條記錄希俩,只插入偶數(shù)次
DELIMITER $
CREATE PROCEDURE test_while2(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_while2(100)

經(jīng)典練習題

/*一吊宋、已知表stringcontent
其中字段:
id 自增長
content varchar(20)

向該表插入指定個數(shù)的,隨機的字符串
*/
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+1)
        INSERT INTO stringcontent(content) VALUES(SUBSTR(str,startIndex,len));
        SET i=i+1;
    END WHILE;

END $

CALL test_randstr_insert(10)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鳞上,隨后出現(xiàn)的幾起案子腺劣,更是在濱河造成了極大的恐慌,老刑警劉巖因块,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件橘原,死亡現(xiàn)場離奇詭異,居然都是意外死亡涡上,警方通過查閱死者的電腦和手機趾断,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吩愧,“玉大人芋酌,你說我怎么就攤上這事⊙慵眩” “怎么了脐帝?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長糖权。 經(jīng)常有香客問我堵腹,道長,這世上最難降的妖魔是什么星澳? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任疚顷,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腿堤。我一直安慰自己阀坏,他們只是感情好,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布笆檀。 她就那樣靜靜地躺著忌堂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酗洒。 梳的紋絲不亂的頭發(fā)上浸船,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天,我揣著相機與錄音寝蹈,去河邊找鬼。 笑死登淘,一個胖子當著我的面吹牛箫老,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播黔州,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼耍鬓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了流妻?” 一聲冷哼從身側(cè)響起牲蜀,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绅这,沒想到半個月后涣达,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡证薇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年度苔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浑度。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡寇窑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出箩张,到底是詐尸還是另有隱情甩骏,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布先慷,位于F島的核電站饮笛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏论熙。R本人自食惡果不足惜缎浇,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赴肚。 院中可真熱鬧素跺,春花似錦二蓝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至踩验,卻和暖如春鸥诽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背箕憾。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工牡借, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人袭异。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓钠龙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親御铃。 傳聞我的和親對象是個殘疾皇子碴里,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容