本文內容: 什麼是代碼執行結構 順序結構 分支結構 迴圈結構 首發日期:2018-04-18 什麼是代碼執行結構: 這裡所說的代碼執行結構就是多條sql語句的執行順序。 代碼執行結構主要用於觸發器、存儲過程和函數等存儲多條sql語句中。 順序結構: 順序結構就是從上到下依次執行sql語句 一般預設情 ...
本文內容:
- 什麼是代碼執行結構
- 順序結構
- 分支結構
- 迴圈結構
首發日期:2018-04-18
什麼是代碼執行結構:
- 這裡所說的代碼執行結構就是多條sql語句的執行順序。
- 代碼執行結構主要用於觸發器、存儲過程和函數等存儲多條sql語句中。
順序結構:
- 順序結構就是從上到下依次執行sql語句
- 一般預設情況下都是順序結構
分支結構:
- 分支結構的執行是依據一定的條件選擇執行路徑,它會依據我們給定的條件來選擇執行那些sql語句
- mysql中分支結構只有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); -- 使用存儲過程來 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; -- 調用,並查看結果 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');
補充:
- 理論上,如果做出判斷不符合,然而又不想繼續執行下去的時候,應該執行返回(比如C語言的return來中斷函數運行),但mysql中並沒有對應的中斷機制,所以需要我們主動中斷(中斷的方法有很多種,比如執行一條符合語法但無法運行的語句)【這種場景比如有:判斷一名學生是否存在,不存在就不執行任何操作,所以應該執行一條無法成功運行的語句來報錯返回。】
- 事實上,還存在一種分支結構:case when 【好像好多書都沒怎麼講到,所以這裡不講述。有興趣的可以自行百度。】
迴圈結構:
- 迴圈結構是指在程式中需要反覆執行某個功能而設置的一種程式結構。mysql中迴圈結構用於迴圈多次運行同一sql語句。
- mysql中的迴圈結構有loop結構、while結構、repeat結構,這裡只講述while結構,有興趣瞭解其他的可以自行百度。
- 語法:
while 條件 do sql語句 end while;
- 學過其他語言的可能會瞭解到迴圈結構中有continue(提前結束此次迴圈)和break(跳出整個迴圈)
- 在mysql的迴圈結構中,使用leave來代替break,使用iterate來代替continue,但它們的使用語法是:leave\iterate 迴圈名,所以如何定義迴圈名呢?
迴圈名:while 條件 do sql語句; leave\iterate 迴圈名; end while;
- 示例:
-- 無意義的一個例子,僅作演示 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; -- 以傳入參數作為條件的 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;