lyt经典版MySQL基础——流程控制结构 [数据库教程]

database

  1#流程控制结构

2/*

3顺序结构:程序从上往下依次执行

4分支结构:程序从两条或多条路径中选择一条去执行

5循环结构:程序在满足一定条件的基础上,重复执行一段代码

6

7*/

8

9#一、分支结构

10 #1.if函数

11/*

12功能:实现简单的双分支

13语法:

14if(表达式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)

51else可以省略,如果else省略了,并且所有when条件都不满足,则返回null

52*/

53

54#案例

55 #创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩:90-100,显示A;80-90,显示B;

56 #60-80,显示C;否则显示D

57DELIMITER $

58CREATEPROCEDURE test_case1(IN score INT)

59BEGIN

60CASE

61WHEN score>=90AND score<=100THENSELECTA;

62WHEN score>=80THENSELECTB;

63WHEN score>=60THENSELECTC;

64ELSESELECTD;

65ENDCASE;

66END $

67

68 CALL test_case1(55)$

69

70 #3.if结构

71/*

72功能:实现多重分支

73

74语法:

75if 条件1 then 语句1;

76elseif 条件2 then 语句2;

77...

78【else 语句n;】

79end if;

80

81应用在begin end中

82*/

83

84 #案例1:根据传入的成绩,来显示等级,比如传入的成绩:90-100,返回A;80-90,显示B;

85 #60-80,显示C;否则显示D

86DELIMITER $

87CREATEFUNCTION test_if(score INT) RETURNSCHAR

88BEGIN

89IF score>=90AND score<=100THENRETURNA;

90 ELSEIF score>=80THENRETURNB;

91 ELSEIF score>=60THENRETURNC;

92ELSERETURND;

93ENDIF;

94END$

95

96SELECT test_if(79)$

97

98#二、循环结构

99/*

100分类:

101while、loop、repeat

102

103循环控制:

104iterate 类似于 continue,继续,结束本次循环,继续下一次

105leave 类似于 break,跳出,结束当前所在的循环

106*/

107

108 #1.while

109/*

110语法:

111【标签:】while 循环条件 do

112 循环体;

113 end while【标签】;

114

115联想:

116while(循环条件){

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表中多条记录

142DELIMITER $

143CREATEPROCEDURE pro_while1(IN insertCount INT)

144BEGIN

145DECLARE i INTDEFAULT1;

146WHILE i<=insertCount DO

147INSERTINTO admin(username,PASSWORD) VALUES(CONCAT(Rose,i),666);

148SET i=i+1;

149ENDWHILE;

150END$

151

152 CALL pro_while1(100)$

153

154/*

155int i=1;

156while(i<=insertCount){

157 //插入

158 i++;

159}

160*/

161

162 #2.添加leave语句

163 #案例1:批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止

164TRUNCATETABLE admin$

165DROPPROCEDUREIFEXISTS test_while1$

166DELIMITER $

167CREATEPROCEDURE test_while1(IN insertCount INT)

168BEGIN

169DECLARE i INTDEFAULT1;

170 a:WHILE i<=insertCount DO

171INSERTINTO admin(username,PASSWORD) VALUES(CONCAT(xiaohua,i),0000);

172IF i>=20THEN LEAVE a;

173ENDIF;

174SET i=i+1;

175ENDWHILE a;

176END$

177

178 CALL test_while1(100)$

179

180#案例2:批量插入,根据次数插入到admin表中多条记录,只插入偶数次

181DELIMITER $

182CREATEPROCEDURE test_while1(IN insertCount INT)

183BEGIN

184DECLARE i INTDEFAULT0;

185 a:WHILE i<=insertCount DO

186SET i=i+1;

187IF MOD(i,2)!=0THEN ITERATE a;

188ENDIF;

189INSERTINTO admin(username,PASSWORD) VALUES(CONCAT(xiaohua,i),0000);

190ENDWHILE a;

191END$

192

193 CALL test_while1(100)$

194/*

195int i=0;

196while(i<=insertCount){

197 i++;

198 if(i%2==0){

199 continue;

200 }

201 插入

202}

203*/

204

205#经典案例面试题

206/*1、已知表stringcontent

207其中字段:

208id 自增长

209content varchar(20)

210向该表插入指定个数的,随机的字符串

211*/

212DROPTABLEIFEXISTS stringcontent;

213CREATETABLEIFNOTEXISTS stringcontent(

214 id INTPRIMARYKEY AUTO_INCREMENT,

215 content VARCHAR(20));

216DESC stringcontent;

217DELIMITER $

218CREATEPROCEDURE test_randstr_insert(IN insertcount INT)

219BEGIN

220DECLARE i INTDEFAULT1; #定义一个循环变量i,表示插入次数

221DECLAREstrVARCHAR(26) DEFAULTabcdefghijklmnopqrstuvwxyz;

222DECLARE startIndex INTDEFAULT1; #代表起始索引

223DECLARElenINTDEFAULT0; #代表截取的字符的长度

224WHILE(i<=insertcount)DO

225SET startIndex=FLOOR(RAND()*26+1); #产生一个随机的整数,代表起始索引1 ~26

226SETlen=FLOOR(RAND()*(26-startIndex+1)+1); #产生一个随机的整数,代表 截取长度,1~26-startIndex+1

227INSERTINTO stringcontent(content) VALUES(SUBSTR(str,startIndex,len));

228SET i=i+1; #循环变量更新

229ENDWHILE;

230END$

231

232 CALL test_randstr_insert(10)$

 

lyt经典版MySQL基础——流程控制结构

以上是 lyt经典版MySQL基础——流程控制结构 [数据库教程] 的全部内容, 来源链接: utcz.com/z/534982.html

回到顶部