MySQL学习笔记:while循环
思考:while循环是否只能使用在存储过程或者存储函数之中,不能直接在查询语句中使用?
———— 循环一般在存储过程和存储函数中使用。
直接放几个例子:
例一:
1.创建存储过程
复制代码
DELIMITER KaTeX parse error: Expected 'EOF', got '#' at position 51: … in_count INT) #̲ 创建存储过程 学习while…
DELIMITER ;
复制代码
2.调用存储过程
CALL test_while_001(10); # 45 输出
3.删除存储过程
DROP PROCEDURE test_while_001;
例二:
1.创建函数
复制代码
DELIMITER KaTeX parse error: Expected 'EOF', got '#' at position 69: …ETURNS INT(10) #̲ 创建函数 学习while循环…
DELIMITER ;
复制代码
注意:创建函数之前必须更改系统设置 否则无法创建函数
SET GLOBAL log_bin_trust_function_creators=TRUE;
2.调用函数
SELECT my_test_function(10);
SELECT my_test_function(24);
SELECT my_test_function(222);
3.删除函数
DROP FUNCTION my_test_function;
例三:
1.如果存在,则删除
DROP PROCEDURE IF EXISTS u_head_and_low_pro;
2.创建存储过程
复制代码
DELIMITER
C
R
E
A
T
E
P
R
O
C
E
D
U
R
E
u
h
e
a
d
a
n
d
l
o
w
p
r
o
(
)
B
E
G
I
N
D
E
C
L
A
R
E
n
I
N
T
D
E
F
A
U
L
T
10
;
S
E
T
n
=
n
−
1
;
W
H
I
L
E
n
>
0
D
O
S
E
L
E
C
T
n
;
S
E
T
n
=
n
−
1
;
E
N
D
W
H
I
L
E
;
E
N
D
CREATE PROCEDURE u_head_and_low_pro() BEGIN DECLARE n INT DEFAULT 10; SET n = n - 1; WHILE n > 0 DO SELECT n; SET n = n - 1; END WHILE; END
CREATEPROCEDUREuheadandlowpro()BEGINDECLAREnINTDEFAULT10;SETn=n−1;WHILEn>0DOSELECTn;SETn=n−1;ENDWHILE;END
DELIMITER ;
复制代码
3.调用存储过程
CALL u_head_and_low_pro();
4.删除存储过程
DROP PROCEDURE u_head_and_low_pro;
注:不依赖于任何数据库表,完整展示变量、while语句、存储过程的用法。
例四:
复制代码
创建存储过程
DELIMITER
C
R
E
A
T
E
P
R
O
C
E
D
U
R
E
t
e
s
t
w
h
i
l
e
(
)
B
E
G
I
N
D
E
C
L
A
R
E
S
U
M
I
N
T
D
E
F
A
U
L
T
0
;
D
E
C
L
A
R
E
t
I
N
T
D
E
F
A
U
L
T
5
;
W
H
I
L
E
t
>
0
D
O
S
E
T
S
U
M
=
S
U
M
+
t
;
S
E
T
t
=
t
−
1
;
E
N
D
W
H
I
L
E
;
S
E
L
E
C
T
S
U
M
;
E
N
D
CREATE PROCEDURE test_while() BEGIN DECLARE SUM INT DEFAULT 0; DECLARE t INT DEFAULT 5; WHILE t > 0 DO SET SUM = SUM + t; SET t = t - 1; END WHILE; SELECT SUM; END
CREATEPROCEDUREtestwhile()BEGINDECLARESUMINTDEFAULT0;DECLAREtINTDEFAULT5;WHILEt>0DOSETSUM=SUM+t;SETt=t−1;ENDWHILE;SELECTSUM;END
DELIMITER ;
调用存储过程
CALL test_while(); # 15
删除
DROP PROCEDURE test_while;