mysql代碼執(zhí)行結(jié)構(gòu)實(shí)例分析【順序、分支、循環(huán)結(jié)構(gòu)】
更新時(shí)間:2020年04月20日 09:54:35 作者:隨風(fēng)行云
這篇文章主要介紹了mysql代碼執(zhí)行結(jié)構(gòu),結(jié)合實(shí)例形式分析了mysql順序結(jié)構(gòu)、分支結(jié)構(gòu)與循環(huán)結(jié)構(gòu)相關(guān)原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
本文實(shí)例講述了mysql代碼執(zhí)行結(jié)構(gòu)。分享給大家供大家參考,具體如下:
本文內(nèi)容:
- 什么是代碼執(zhí)行結(jié)構(gòu)
- 順序結(jié)構(gòu)
- 分支結(jié)構(gòu)
- 循環(huán)結(jié)構(gòu)
首發(fā)日期:2018-04-18
什么是代碼執(zhí)行結(jié)構(gòu):
- 這里所說的代碼執(zhí)行結(jié)構(gòu)就是多條sql語句的執(zhí)行順序。
- 代碼執(zhí)行結(jié)構(gòu)主要用于觸發(fā)器、存儲(chǔ)過程和函數(shù)等存儲(chǔ)多條sql語句中。
順序結(jié)構(gòu):
- 順序結(jié)構(gòu)就是從上到下依次執(zhí)行sql語句
- 一般默認(rèn)情況下都是順序結(jié)構(gòu)
分支結(jié)構(gòu):
- 分支結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,它會(huì)依據(jù)我們給定的條件來選擇執(zhí)行那些sql語句
- mysql中分支結(jié)構(gòu)只有if-else:
- 語法:
if 條件 then sql語句 [elseif 條件 then sql語句] [else sql語句] end if;
- 示例:
-- create table pass(id int primary key auto_increment,name varchar(15),score int ); create table unpass(id int primary key auto_increment,name varchar(15),score int); -- 使用存儲(chǔ)過程來 create procedure myif(in name varchar(15),in score int) begin if score >=60 then insert into pass(name,score) values(name,score); else insert into unpass(name,score) values(name,score); end if; end; -- 調(diào)用,并查看結(jié)果 call myif("lilei",61); call myif("hanmeimei",95); select * from pass; select * from unpass; call myif("tuhao",59); select * from unpass;
- if中的條件基本可以參照select語句的while子句的條件。什么in\not in \= \!= 等都可以用。
create procedure myif3(in a char(1)) begin if a in('a','b') then select 1; else select 2; end if; end; call myif3('a'); call myif3('b'); call myif3('c');
- 語法:
補(bǔ)充:
- 理論上,如果做出判斷不符合,然而又不想繼續(xù)執(zhí)行下去的時(shí)候,應(yīng)該執(zhí)行返回(比如C語言的return來中斷函數(shù)運(yùn)行),但mysql中并沒有對(duì)應(yīng)的中斷機(jī)制,所以需要我們主動(dòng)中斷(中斷的方法有很多種,比如執(zhí)行一條符合語法但無法運(yùn)行的語句)【這種場景比如有:判斷一名學(xué)生是否存在,不存在就不執(zhí)行任何操作,所以應(yīng)該執(zhí)行一條無法成功運(yùn)行的語句來報(bào)錯(cuò)返回?!?/li>
- 事實(shí)上,還存在一種分支結(jié)構(gòu):case when 【好像好多書都沒怎么講到,所以這里不講述。有興趣的可以自行百度。】
循環(huán)結(jié)構(gòu):
- 循環(huán)結(jié)構(gòu)是指在程序中需要反復(fù)執(zhí)行某個(gè)功能而設(shè)置的一種程序結(jié)構(gòu)。mysql中循環(huán)結(jié)構(gòu)用于循環(huán)多次運(yùn)行同一sql語句。
- mysql中的循環(huán)結(jié)構(gòu)有l(wèi)oop結(jié)構(gòu)、while結(jié)構(gòu)、repeat結(jié)構(gòu),這里只講述while結(jié)構(gòu),有興趣了解其他的可以自行百度。
- 語法:
while 條件 do sql語句 end while;
- 學(xué)過其他語言的可能會(huì)了解到循環(huán)結(jié)構(gòu)中有continue(提前結(jié)束此次循環(huán))和break(跳出整個(gè)循環(huán))
- 在mysql的循環(huán)結(jié)構(gòu)中,使用leave來代替break,使用iterate來代替continue,但它們的使用語法是:leave\iterate 循環(huán)名,所以如何定義循環(huán)名呢?
循環(huán)名:while 條件 do sql語句; leave\iterate 循環(huán)名; end while;
- 示例:
-- 無意義的一個(gè)例子,僅作演示 create table whilenum(id int); -- 自帶條件的 create procedure mywhile() begin declare num int; set num=10; c1:while num>0 do insert into whilenum values(num); set num=num-1; end while; end; -- 以傳入?yún)?shù)作為條件的 create procedure mywhile2(in num int) begin c1:while num>0 do insert into whilenum values(num); set num=num-1; end while; end; -- 帶中斷的 create procedure mywhile3(in num int) begin c1:while num>0 do if num%2=0 then set num=num-1; iterate c1; end if; insert into whilenum values(num); set num=num-1; end while; end;
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過程技巧大全》、《MySQL數(shù)據(jù)庫鎖相關(guān)技巧匯總》及《MySQL常用函數(shù)大匯總》
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫計(jì)有所幫助。
相關(guān)文章
MySql分頁時(shí)使用limit+order by會(huì)出現(xiàn)數(shù)據(jù)重復(fù)問題解決
在MySQL中我們通常會(huì)采用limit來進(jìn)行翻頁查詢,當(dāng)limit遇到 order by的時(shí)候會(huì)出現(xiàn)數(shù)據(jù)重復(fù)問題,本文就來記錄一下,感興趣的可以了解一下2021-08-08