From afbcb46eaece88aacd300b75b035d62251fd0314 Mon Sep 17 00:00:00 2001 From: unknown <2152890632@qq.com> Date: Wed, 11 Oct 2023 12:40:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AA=E7=8E=AF=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20231010.md" | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 "06 \351\231\210\345\277\227\344\274\237/20231010.md" diff --git "a/06 \351\231\210\345\277\227\344\274\237/20231010.md" "b/06 \351\231\210\345\277\227\344\274\237/20231010.md" new file mode 100644 index 0000000..1ad9996 --- /dev/null +++ "b/06 \351\231\210\345\277\227\344\274\237/20231010.md" @@ -0,0 +1,131 @@ +## 笔记 + +### 循环 + +#### loop循环 + +```mysql +declare i int default 1; +a:loop -- 本质上是一个死循环,所以要在循环有个跳出循环的条件 + select concat('你好',i); + if i>num then leave a; + end if;-- 如果循环要用到leave(break),iterate(continue)这两种关键字,就一定给循环和标签符 + set i=i+1; -- 迭代的条件,修改变量 i 的值为了防止i不变导致死循环 +end loop a; +``` + +#### while循环 + +```mysql +declare i int default 1; +b:while i <= num do -- 这要开始就满足条件才可以进入循环 + select concat('你好',i); + set i=i+1; -- 迭代的条件,修改变量 i 的值为了防止i不变导致死循环 +end while b; +``` + +#### repeat循环 + +```mysql +declare i int default 1; +b:repeat + set i=i+1; -- 迭代的条件,修改变量 i 的值为了防止i不变导致死循环 + select concat('你好',i); + until i>5 -- until 后面直接写跳到循环的条件且不写分号; +end repeat b; +-- repeat 循环跟while相反,while不满足条件一次都不会执行,而repeat循环至少执行一次 +``` + +#### break + +可在循环中起到跳出整个循环的作用 + +#### leave + +用在循环中,表示中止并跳出循环,也可以用在存储过程 + +#### iterate + +在MySQL中是跳出某一个值,比如在循环中遇到被10整除为0的值跳过就可以用到 + +```mysql +declare i int default 1; +b:while i<=num do + set i=i+1; + if i%2=1 then iterate b;end if; + select i-1; +end while b; +``` + + + +### 作业 + +```mysql +-- 写一个存储过程,可以输入一个整数,输入小于或等于0时,提示非法输入,并中止这个存储过程, +-- 否则先判断这个数和是不是大于20,如果大于20就从1循环到这个数,并找出所有的偶数(但遇到逢10的数要跳过)。小于等于20就提示数太小了,并退出。 + +-- 要求,循环部分,要用三种语法分别做一遍 +create database biao charset utf8; +use biao; +drop procedure pro_loop; +delimiter // + create procedure pro_loop(in num int) + a:begin + declare i int default 1; + if num <= 0 then select '非法输入'; + leave a; + elseif num <= 20 then select '数太小了'; + leave a; + end if; + b:loop + if num > 20 and i%2 = 0 and i%10 != 0 then select i; + elseif i > num then leave b; + end if; + set i = i + 1; + end loop b; + end // +delimiter; +call pro_loop(30); + +drop procedure pro_while; +delimiter // + create procedure pro_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; + end if; + b:while i <= num do + if num > 5 and i % 2 = 0 and i%10 != 0 then select i; + end if; + set i = i + 1; + end while b; + end // +delimiter; +call pro_while(30); + +drop procedure pro_repeat; +delimiter // + create procedure pro_repeat(in num int) + a:begin + declare i int default 0; + if num <= 0 then select '非法输入'; + leave a; + elseif num <= 20 then select '数太小了'; + leave a; + end if; + b:repeat + set i = i + 1; + if num > 5 and i % 2 = 0 and i%10 != 0 then select i; + end if; + until i >= num + end repeat b; + end // +delimiter; +call pro_repeat(30); + +``` + -- Gitee