diff --git "a/20 \347\237\263\350\211\257\346\266\233/20231010 \345\276\252\347\216\257\346\263\250\346\204\217\344\272\213\351\241\271.md" "b/20 \347\237\263\350\211\257\346\266\233/20231010 \345\276\252\347\216\257\346\263\250\346\204\217\344\272\213\351\241\271.md" new file mode 100644 index 0000000000000000000000000000000000000000..b5485f11a2437515ca52d2e8204c2e693f8e4a18 --- /dev/null +++ "b/20 \347\237\263\350\211\257\346\266\233/20231010 \345\276\252\347\216\257\346\263\250\346\204\217\344\272\213\351\241\271.md" @@ -0,0 +1,113 @@ +#### repeat(死循环) + +~~~ mysql +delimiter $$ +create procedure proc12(in insertCount int) +begin + declare i int default 1; + label:repeat + # 至少执行一次 + insert into user(uid,username,psw) values(i,concat('user-',i),'123456'); + set i = i + 1; + until i > insertCount; # 当 i>10 的时候才跳出循环,如果没有这一句,就是死循环 + end repeat label; + select '循环结束'; +end $$ +delimiter ; +call proc12(10) +~~~ + +注意: + +​ 1. if 和 case 的区别:case可以写在 select 语句中(如判断男女),而 if 不行 + +​ 2. 定义变量 declare 关键字 前面不能有其他语句 + +​ 3. 如果要用 leave(跳出整个) 或 iterate(跳出本次)两个关键字,就要加标记符 + +#### 作业 + +~~~ mysql +-- 写一个存储过程,可以输入一个整数,输入小于或等于0时,提示非法输入,并中止这个存储过程, +-- 否则先判断这个数和是不是大于20,如果大于20就从1循环到这个数,并找出所有的偶数(但遇到逢10的数要跳过)。小于等于20就提示数太小了,并退出。 + +drop procedure t_repeat; +-- 要求,循环部分,要用三种语法分别做一遍 + +# 1.使用loop循环: +delimiter $$ +create procedure t_loop(in num int) +a:begin + # 1. 定义变量 + declare i int default 1; + # 2. 判断,如果小于0 或 小于等于20 就退出存储过程 + if num <= 0 then select '非法输入,程序已退出'; leave a; + elseif num <=20 then select '数太小了,程序已退出'; leave a; + # 3.1 否则就是大于20,循环判断 + else + b:loop + # 3.2 如果是10的倍数,就跳出本次循环 + if i % 10 = 0 then set i = i+1;iterate b; + # 3.3 如果是2的倍数,就打印 + elseif i % 2 = 0 then select i; + end if; + # i++ + set i = i+1; + # 退出循环 + if i > num then leave b; end if; + end loop; + end if; +end $$ +delimiter ; + +call t_loop(-1); +call t_loop(5); +call t_loop(30); + +# 2.使用while循环: +delimiter $$ +create procedure t_while(in num int) +a:begin + declare i int default 1; + if num <= 0 then select '非法输入,程序已退出'; leave a; + elseif num <=20 then select '数太小了,程序已退出'; leave a; + else + b:while i<=num do + if i % 10 = 0 then set i = i+1;iterate b; + elseif i % 2 = 0 then select i; + end if; + set i = i+1; + end while; + end if; +end $$ +delimiter ; + +call t_while(-1); +call t_while(5); +call t_while(30); + +# 3.使用repeat循环: +delimiter $$ +create procedure t_repeat(in num int) +a:begin + declare i int default 1; + if num <= 0 then select '非法输入,程序已退出'; leave a; + elseif num <=20 then select '数太小了,程序已退出'; leave a; + else + b:repeat + if i % 10 = 0 then set i = i+1;iterate b; + elseif i % 2 = 0 then select i; + end if; + set i = i+1; + until i>num + end repeat b; + end if; +end $$ +delimiter ; + +call t_repeat(-1); +call t_repeat(20); +call t_repeat(30); + +~~~ +