名称 | 语法 | 特点 | 位置 |
while |
Label:while 循环条件 do 循环体 end while Label; |
先判断 后执行 | begin end中 |
repeat |
Label:repeat 循环体 unitl 结束循环条件 end repeat Label; |
先执行 后判断 | |
loop |
Label:loop 循环体 end loop Label; | 无条件的死循环 |
对应示例:假如在表ttt中插入指定数据的数据。
建表语句
CREATE TABLE `ttt` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '',
`password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
存储过程循环写法
#假如在表ttt中插入指定数据的数据。
/*1.while*/
DROP PROCEDURE IF EXISTS demo_while;
DELIMITER $$
CREATE PROCEDURE demo_while(IN num INT)
BEGIN
DECLARE i INT DEFAULT 0;
main:WHILE i <= num DO
INSERT INTO ttt(username,PASSWORD) VALUES(CONCAT('user_',i),CONCAT('pwd_',i));
SET i = i+1;
END WHILE main;
END $$
DELIMITER ;
CALL demo_while(100);
/*2 do while*/
DROP PROCEDURE IF EXISTS demo_do_while;
DELIMITER $$
CREATE PROCEDURE demo_do_while(IN num INT)
BEGIN
SET @i = num;
main:REPEAT
INSERT INTO ttt(username,PASSWORD) VALUES(CONCAT('do_user_',@i),CONCAT('do_pwd_',@i));
SET @i = @i-1;
UNTIL @i <= 0
END REPEAT main;
END $$
DELIMITER ;
CALL demo_do_while(100);
/*3 loop*/
DROP PROCEDURE IF EXISTS demo_loop;
DELIMITER $$
CREATE PROCEDURE demo_loop(IN num INT)
BEGIN
DECLARE m INT DEFAULT 0;
main:LOOP
SET m = m+1;
IF m > num THEN LEAVE main;
END IF;
INSERT INTO ttt(username,PASSWORD) VALUES(CONCAT('loop_user_',m),CONCAT('loop_pwd_',m));
END LOOP main;
END $$
DELIMITER ;
TRUNCATE TABLE ttt;
CALL demo_loop(100);