MySQL:while循环(存储过程、函数)
一、创建student表
-- ---------------------------- -- Table structure for students -- ---------------------------- DROP TABLE IF EXISTS `students`; CREATE TABLE `students` ( `id` int NOT NULL AUTO_INCREMENT COMMENT 主键id, `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 姓名, `code` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 学号, `class` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 一班 COMMENT 所在班级, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ---------------------------- -- Records of students -- ---------------------------- INSERT INTO `students` VALUES (1, 张三, 202001001, 一班); INSERT INTO `students` VALUES (2, 李四, 202001002, 一班); INSERT INTO `students` VALUES (3, 王五, 202001003, 一班); INSERT INTO `students` VALUES (4, 赵六, 202001004, 一班);
示意图:
二、使用while循环向students表中插入数据
(存储过程)
1. 定义存储过程
DELIMITER $$ DROP PROCEDURE if EXISTS insertStudents; # 如果存在test存储过程则删除 CREATE procedure insertStudents() # 创建无参存储过程,名称为insertStudents BEGIN DECLARE i INT; # 申明变量 SET i = 0; # 变量赋值 WHILE i<5 DO # 结束循环的条件: 当i大于5时跳出while循环 INSERT INTO students(name, code, class) VALUES(xxx, 2020010 + i + 10, 一班); # 往students表添加数据 SET i = i+1; # 循环一次,i加1 END WHILE; # 结束while循环 SELECT * FROM sudents; # 查看students表数据 END $$ # 结束定义语句 DELIMITER ; # 重新将分隔符设置为;
执行结果:
2.调用存储过程
CALL insertStudents(); #调用存储过程
3.删除存储过程
DROP PROCEDURE insertStudents; #删除存储过程
(函数)
1. 创建函数
SET GLOBAL log_bin_trust_function_creators=TRUE; DELIMITER $$ DROP FUNCTION if EXISTS insertStudents; # 如果存在insertStudents函数则删除 CREATE FUNCTION insertStudents(i INT(10)) RETURNS INT(10) # 创建函数 学习while循环的用法 BEGIN WHILE i<5 DO # 结束循环的条件: 当i大于5时跳出while循环 INSERT INTO students(name, code, class) VALUES(xxx, 2020010 + i + 10, 一班); # 往students表添加数据 SET i = i+1; # 循环一次,i加1 END WHILE; # 结束while循环 RETURN (SELECT COUNT(*) FROM students); END $$ DELIMITER ;
执行结果:
2. 调用函数
SELECT insertStudents(3); #调用函数
执行结果:
3. 删除函数
DROP FUNCTION insertStudents; #删除函数