知識筆記--流程控制結構
阿新 • • 發佈:2022-03-24
1. 流程控制結構
順序結構:程式從上往下依次執行
分支結構:程式從兩條或多條路徑中選擇一條去執行
迴圈結構:程式在滿足一定條件的基礎上,重複執行一段程式碼
2. 分支結構
1. if函式
功能:
實現簡單的雙分支
語法:
if(表示式1,表示式2,表示式3)
執行順序:
如果表示式1成立,則if函式返回表示式2的值,否則返回表示式3的值
應用:
任何地方
2.case結構
特點: 1. 可以作為表示式,巢狀在其他語句中使用,可以放在任何地方,BEGIN END中或BEGIN END的外面 可以作為獨立的語句去使用,只能放在BEGIN END中 2. 如果WHEN中的值滿足或條件成立,則執行對應的THEN後面的語句,並且結束CASE 如果都不滿足,則執行ELSE中的語句或值 3. ELSE可以省略,如果ELSE省略了,並且所有WHEN條件都不滿足,則返回NULL。
案例
題:根據傳入的成績,來顯示等級,來顯示等級,比如傳入的成績:90-100,顯示A;80-90,顯示B;60-80,顯示C;否則顯示D。 delimiter $ create procedure test_case(IN score int) BEGIN CASE WHEN score >= 90 AND score <= 100 THEN select 'A'; WHEN score >= 80 THEN select 'B'; WHEN score >= 60 THEN select 'C'; ELSE select 'D'; END case; END $ delimiter $ CALL test_case(60) $
3. if結構
功能:實現多量分支
語法:
if 條件1 then 語句1;
elseif 條件2 then 語句2;
...
[else 語句n;]
end if;
應用場合:
應用在begin end中
案例
題:根據傳入的成績,來顯示等級,來顯示等級,比如傳入的成績:90-100,返回A;80-90,返回B;60-80,返回C;否則返回D。 delimiter $ create FUNCTION test_if(score int) returns char(1) BEGIN if score >= 90 AND score <= 100 THEN return 'A'; elseif score >= 80 THEN return 'B'; elseif score >= 60 THEN return 'C'; else RETURN 'D'; end if; END $ select test_if(80) $
3. 迴圈結構
分類:
while loop repeat
迴圈控制:
iterate 類似於continue,結束本次迴圈,進行下一次迴圈。
leave 類似於break,跳出,結束當前所在的迴圈
1. while
語法:
[標籤:]while 迴圈條件 do
迴圈體;
end while [標籤];
2. loop
語法:
[標籤:]loop
迴圈體;
end loop [標籤];
可以用來簡單的模擬死迴圈
3. repeat
語法:
[標籤:]repeat
迴圈體;
until 結束迴圈的條件
end repeat [標籤];
案例
1.批量插入,根據次數插入到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 $
delimiter $
call pro_while1(100) $
2.批量插入,根據次數插入到admin表中多條記錄,如果次數>20則停止
delimiter $
create procedure pro_while2(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 $
delimiter $
call pro_while2(33) $
3.新增iterate語句
批量插入,根據次數插入到admin表中多條記錄,如果次數>20則停止
delimiter $
create procedure pro_while(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 $
delimiter $
call pro_while(20) $
案例
1. 已知表stringcontent
其中欄位:
id 自增長
content varchar(20)
向該表插入指定個數的,隨機的字串
create table stringcontent(
id int primary key auto_increment,
content varchar(20)
);
delimiter $
create procedure test_randstr_insert2(IN insertCount INT)
BEGIN
declare i int default 1; # 定義迴圈變數,表示插入次數
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()*20+1);
insert into stringcontent(content)
values(SUBSTR(str,startIndex,len));
set i = i + 1;
END WHILE;
END $
delimiter $
call test_randstr_insert2(20) $