1 #流程控制结构
2
8
9 #一、分支结构
10 #1.if函数
11
20
21 #2.case结构
22
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
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
107
108 #1.while
109
120
121 #2.loop
122
130
131 #3.repeat
132
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
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
204
205 #经典案例面试题
206
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基础——流程控制结构
原文地址:https://www.cnblogs.com/yanwuliu/p/13406214.html