lyt经典版MySQL基础——流程控制结构
Posted 学而时习之,不亦说乎
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lyt经典版MySQL基础——流程控制结构相关的知识,希望对你有一定的参考价值。
1 #流程控制结构 2 /* 3 顺序结构:程序从上往下依次执行 4 分支结构:程序从两条或多条路径中选择一条去执行 5 循环结构:程序在满足一定条件的基础上,重复执行一段代码 6 7 */ 8 9 #一、分支结构 10 #1.if函数 11 /* 12 功能:实现简单的双分支 13 语法: 14 if(表达式1,表达式2,表达式3) 15 执行顺序: 16 如果表达式1成立,则if函数返回表达式2的值,否则返回表达式3的值 17 18 应用:任何地方 19 */ 20 21 #2.case结构 22 /* 23 情况1:类似于java中的switch语句,一般用于实现等值判断 24 25 语法: 26 case 变量|表达式|字段 27 when 要判断的值 then 返回的值1或语句1 ; 28 when 要判断的值 then 返回的值2或语句2 ; 29 ... 30 else 要返回的值n或语句n ; 31 end case ; 32 33 情况2:类似于java中的多重if语句,一般用于实现区间判断 34 35 语法: 36 CASE 37 WHEN 要判断的条件1 THEN 返回的值1或语句1; 38 WHEN 要判断的条件2 THEN 返回的值2或语句2; 39 ... 40 ELSE 要返回的值n或语句n; 41 END case; 42 43 特点: 44 (1) 45 可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,begin end 中或 begin end 的外面; 46 可以作为独立的语句使用 47 (2) 48 如果when中的值满足或条件成立,则执行对应的then后面的语句,并且结束case; 49 如果都不满足,则执行else中的语句或值 50 (3) 51 else可以省略,如果else省略了,并且所有when条件都不满足,则返回null 52 */ 53 54 #案例 55 #创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩:90-100,显示A;80-90,显示B; 56 #60-80,显示C;否则显示D 57 DELIMITER $ 58 CREATE PROCEDURE test_case1(IN score INT) 59 BEGIN 60 CASE 61 WHEN score>=90 AND score<=100 THEN SELECT ‘A‘; 62 WHEN score>=80 THEN SELECT ‘B‘; 63 WHEN score>=60 THEN SELECT ‘C‘; 64 ELSE SELECT ‘D‘; 65 END CASE; 66 END $ 67 68 CALL test_case1(55)$ 69 70 #3.if结构 71 /* 72 功能:实现多重分支 73 74 语法: 75 if 条件1 then 语句1; 76 elseif 条件2 then 语句2; 77 ... 78 【else 语句n;】 79 end if; 80 81 应用在begin end中 82 */ 83 84 #案例1:根据传入的成绩,来显示等级,比如传入的成绩:90-100,返回A;80-90,显示B; 85 #60-80,显示C;否则显示D 86 DELIMITER $ 87 CREATE FUNCTION test_if(score INT) RETURNS CHAR 88 BEGIN 89 IF score>=90 AND score<=100 THEN RETURN ‘A‘; 90 ELSEIF score>=80 THEN RETURN ‘B‘; 91 ELSEIF score>=60 THEN RETURN ‘C‘; 92 ELSE RETURN ‘D‘; 93 END IF; 94 END$ 95 96 SELECT test_if(79)$ 97 98 #二、循环结构 99 /* 100 分类: 101 while、loop、repeat 102 103 循环控制: 104 iterate 类似于 continue,继续,结束本次循环,继续下一次 105 leave 类似于 break,跳出,结束当前所在的循环 106 */ 107 108 #1.while 109 /* 110 语法: 111 【标签:】while 循环条件 do 112 循环体; 113 end while【标签】; 114 115 联想: 116 while(循环条件){ 117 循环体; 118 } 119 */ 120 121 #2.loop 122 /* 123 语法: 124 【标签:】loop 125 循环体; 126 end loop 【标签】; 127 128 可以用来模拟简单的死循环 129 */ 130 131 #3.repeat 132 /* 133 语法: 134 【标签:】repeat 135 循环体; 136 until 结束循环的条件 137 end repeat 【标签】; 138 */ 139 140 #没有添加循环控制语句 141 #案例:批量插入,根据次数插入到admin表中多条记录 142 DELIMITER $ 143 CREATE PROCEDURE pro_while1(IN insertCount INT) 144 BEGIN 145 DECLARE i INT DEFAULT 1; 146 WHILE i<=insertCount DO 147 INSERT INTO admin(username,PASSWORD) VALUES(CONCAT(‘Rose‘,i),‘666‘); 148 SET i=i+1; 149 END WHILE; 150 END$ 151 152 CALL pro_while1(100)$ 153 154 /* 155 int i=1; 156 while(i<=insertCount){ 157 //插入 158 i++; 159 } 160 */ 161 162 #2.添加leave语句 163 #案例1:批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止 164 TRUNCATE TABLE admin$ 165 DROP PROCEDURE IF EXISTS test_while1$ 166 DELIMITER $ 167 CREATE PROCEDURE test_while1(IN insertCount INT) 168 BEGIN 169 DECLARE i INT DEFAULT 1; 170 a:WHILE i<=insertCount DO 171 INSERT INTO admin(username,PASSWORD) VALUES(CONCAT(‘xiaohua‘,i),‘0000‘); 172 IF i>=20 THEN LEAVE a; 173 END IF; 174 SET i=i+1; 175 END WHILE a; 176 END$ 177 178 CALL test_while1(100)$ 179 180 #案例2:批量插入,根据次数插入到admin表中多条记录,只插入偶数次 181 DELIMITER $ 182 CREATE PROCEDURE test_while1(IN insertCount INT) 183 BEGIN 184 DECLARE i INT DEFAULT 0; 185 a:WHILE i<=insertCount DO 186 SET i=i+1; 187 IF MOD(i,2)!=0 THEN ITERATE a; 188 END IF; 189 INSERT INTO admin(username,PASSWORD) VALUES(CONCAT(‘xiaohua‘,i),‘0000‘); 190 END WHILE a; 191 END$ 192 193 CALL test_while1(100)$ 194 /* 195 int i=0; 196 while(i<=insertCount){ 197 i++; 198 if(i%2==0){ 199 continue; 200 } 201 插入 202 } 203 */ 204 205 #经典案例面试题 206 /*1、已知表stringcontent 207 其中字段: 208 id 自增长 209 content varchar(20) 210 向该表插入指定个数的,随机的字符串 211 */ 212 DROP TABLE IF EXISTS stringcontent; 213 CREATE TABLE IF NOT EXISTS stringcontent( 214 id INT PRIMARY KEY AUTO_INCREMENT, 215 content VARCHAR(20)); 216 DESC stringcontent; 217 DELIMITER $ 218 CREATE PROCEDURE test_randstr_insert(IN insertcount INT) 219 BEGIN 220 DECLARE i INT DEFAULT 1; #定义一个循环变量i,表示插入次数 221 DECLARE str VARCHAR(26) DEFAULT ‘abcdefghijklmnopqrstuvwxyz‘; 222 DECLARE startIndex INT DEFAULT 1; #代表起始索引 223 DECLARE len INT DEFAULT 0; #代表截取的字符的长度 224 WHILE(i<=insertcount)DO 225 SET startIndex=FLOOR(RAND()*26+1); #产生一个随机的整数,代表起始索引1 ~ 26 226 SET len=FLOOR(RAND()*(26-startIndex+1)+1); #产生一个随机的整数,代表 截取长度,1 ~ 26-startIndex+1 227 INSERT INTO stringcontent(content) VALUES(SUBSTR(str,startIndex,len)); 228 SET i=i+1; #循环变量更新 229 END WHILE; 230 END$ 231 232 CALL test_randstr_insert(10)$
以上是关于lyt经典版MySQL基础——流程控制结构的主要内容,如果未能解决你的问题,请参考以下文章