初始化数据环境
如果存在将表删除(慎用)
DROP TABLE IF EXISTS `user`;
初始化表
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`pwd` VARCHAR(255) NOT NULL,
`info` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uni_name` (`name`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
其他基本命令
-
查看表
DESC USER;
SHOW FULL FIELDS FROM user; -
查看表索引
SHOW KEYS FROM USER;
SHOW index FROM USER; -
清空表
DELETE FROM USER;
-
查看指定库中的PROCEDURE
SELECT NAME FROM mysql.proc WHERE db = ‘test’ AND TYPE = ‘PROCEDURE’;
-
删除指定PROCEDURE
DROP PROCEDURE IF EXISTS callback;
-
查看创建代码
SHOW CREATE PROCEDURE callback;
-
调用存储过程(callback是自己命名的)
CALL callback();
接下来开始循环插入三种操作
说明:首先需要设置delimiter。delimiter的作用:告诉解释器,这段命令是否已经结束了,mysql是否可以执行了
默认情况下,delimiter是‘;’但是当我们编写procedure时,如果是默认设置,那么一遇到‘;’,mysql就要执行。
1. WHILE…DO方式
DELIMITER //
CREATE PROCEDURE callback()
BEGIN
DECLARE num INT;
SET num = 0;
WHILE
num < 5 DO
INSERT INTO USER(NAME, pwd, info)
VALUES(CONCAT("name", num),CONCAT("pwd", num),CONCAT("info", num));
SET num = num + 1;
END WHILE;
END;
//
设置好了存储过程要执行调用才生效
CALL callback();
2. REPEAT…END REPEAT
DELIMITER //
CREATE PROCEDURE callback()
begin
declare num int;
set num = 5;
repeat
INSERT INTO USER(NAME, pwd, info)
VALUES(CONCAT("name", num),CONCAT("pwd", num),CONCAT("info", num));
set num = num + 1;
until num >= 10
end repeat;
end;
//
省略调用执行。。。
3. LOOP…END LOOP
DELIMITER //
CREATE PROCEDURE callback()
begin
declare num int;
set num = 10;
LOOP_LABLE :
loop
INSERT INTO USER(NAME, pwd, info)
VALUES(CONCAT("name", num),CONCAT("pwd", num),CONCAT("info", num));
set num = num + 1;
if num >= 20
then leave LOOP_LABLE;
end if;
end loop;
end;
//
省略调用执行。。。
额外补充一下
\g 的作用是分号和在sql语句中写’;’是等效的
\G 的作用是将查到的结构旋转90度变成纵向
我用的是SQLyog客户端,所以不用\g 和 \G这种命令行格式,但是为啥都用\G,因为显示格式友好!
以下是两者对比,参考