MySQL Study之--MySQL存储过程循环
2015-08-04 14:33
639 查看
MySQL Study之--MySQL存储过程循环
在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环。还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体介绍了。
这几个循环语句的格式如下:
WHILE……DO……END WHILE
REPEAT……UNTIL END REPEAT
LOOP……END LOOP
GOTO。
案例分析:
mysql> select * from t2;
+------+-------+
| id | name |
+------+-------+
| 10 | tom |
| 20 | jerry |
| 30 | rose |
+------+-------+
3 rows in set (0.00 sec)
mysql> insert into t2 values (40,concat('usr',10)) ;
Query OK, 1 row affected (0.06 sec)
mysql> select * from t2;
+------+-------+
| id | name |
+------+-------+
| 10 | tom |
| 20 | jerry |
| 30 | rose |
| 40 | usr10 |
+------+-------+
4 rows in set (0.00 sec)
1、while 循环:
mysql> delimiter //
mysql> create procedure proc01()
-> begin
-> declare i int;
-> set i=0;
-> while i<6 do
-> insert into t2 values (i,concat('usr',i));
-> set i=i+1;
-> end while ;
-> end;
-> //
-----如果没有初始化,i默认变量值为NULL,而NULL和任何值操作的结果都是NULL。
mysql> delimiter ;
执行存储过程:
mysql> call proc01();
验证:
mysql> select * from t2;
+------+-------+
| id | name |
+------+-------+
| 10 | tom |
| 20 | jerry |
| 30 | rose |
| 40 | usr10 |
| 0 | usr0 |
| 1 | usr1 |
| 2 | usr2 |
| 3 | usr3 |
| 4 | usr4 |
| 5 | usr5 |
+------+-------+
10 rows in set (0.01 sec)
2、repeat 循环:
mysql> delimiter //
mysql> create procedure proc02()
-> begin
-> declare i int default 0 ;
-> repeat
-> insert into t3 values (i,concat('usr',i));
-> set i=i+1;
-> until i>=5
-> end repeat;
-> end;
-> //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
执行存储过程:
mysql> call proc02();
Query OK, 1 row affected (0.07 sec)
验证:
mysql> select * from t3;
+----+------+
| id | name |
+----+------+
| 0 | usr0 |
| 1 | usr1 |
| 2 | usr2 |
| 3 | usr3 |
| 4 | usr4 |
+----+------+
5 rows in set (0.00 sec)
3、loop 循环:
mysql> delimiter //
mysql> create procedure proc03()
-> begin
-> declare i int default 6;
-> loop_label:loop
-> insert into t2 values (i,concat('usr',i));
-> set i=i+1;
-> if i>=9 then
-> leave loop_label;
-> end if;
-> end loop;
-> end;
-> //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
-----从上面这个例子可以看出,使用LOOP编写同样的循环控制语句要比使用while和repeat编写的要复杂一些:在循环内部加入了IF……END
IF语句,在IF语句中又加入了LEAVE语句,LEAVE语句的意思是离开循环,LEAVE的格式是:LEAVE 循环标号。
执行存储过程:
mysql> call proc03;
Query OK, 1 row affected (0.02 sec)
验证:
mysql> select * from t2;
+------+-------+
| id | name |
+------+-------+
| 10 | tom |
| 20 | jerry |
| 30 | rose |
| 40 | usr10 |
| 0 | usr0 |
| 1 | usr1 |
| 2 | usr2 |
| 3 | usr3 |
| 4 | usr4 |
| 5 | usr5 |
| 6 | usr6 |
| 7 | usr7 |
| 8 | usr8 |
+------+-------+
13 rows in set (0.00 sec)
在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环。还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体介绍了。
这几个循环语句的格式如下:
WHILE……DO……END WHILE
REPEAT……UNTIL END REPEAT
LOOP……END LOOP
GOTO。
案例分析:
mysql> select * from t2;
+------+-------+
| id | name |
+------+-------+
| 10 | tom |
| 20 | jerry |
| 30 | rose |
+------+-------+
3 rows in set (0.00 sec)
mysql> insert into t2 values (40,concat('usr',10)) ;
Query OK, 1 row affected (0.06 sec)
mysql> select * from t2;
+------+-------+
| id | name |
+------+-------+
| 10 | tom |
| 20 | jerry |
| 30 | rose |
| 40 | usr10 |
+------+-------+
4 rows in set (0.00 sec)
1、while 循环:
mysql> delimiter //
mysql> create procedure proc01()
-> begin
-> declare i int;
-> set i=0;
-> while i<6 do
-> insert into t2 values (i,concat('usr',i));
-> set i=i+1;
-> end while ;
-> end;
-> //
-----如果没有初始化,i默认变量值为NULL,而NULL和任何值操作的结果都是NULL。
mysql> delimiter ;
执行存储过程:
mysql> call proc01();
验证:
mysql> select * from t2;
+------+-------+
| id | name |
+------+-------+
| 10 | tom |
| 20 | jerry |
| 30 | rose |
| 40 | usr10 |
| 0 | usr0 |
| 1 | usr1 |
| 2 | usr2 |
| 3 | usr3 |
| 4 | usr4 |
| 5 | usr5 |
+------+-------+
10 rows in set (0.01 sec)
2、repeat 循环:
mysql> delimiter //
mysql> create procedure proc02()
-> begin
-> declare i int default 0 ;
-> repeat
-> insert into t3 values (i,concat('usr',i));
-> set i=i+1;
-> until i>=5
-> end repeat;
-> end;
-> //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
执行存储过程:
mysql> call proc02();
Query OK, 1 row affected (0.07 sec)
验证:
mysql> select * from t3;
+----+------+
| id | name |
+----+------+
| 0 | usr0 |
| 1 | usr1 |
| 2 | usr2 |
| 3 | usr3 |
| 4 | usr4 |
+----+------+
5 rows in set (0.00 sec)
3、loop 循环:
mysql> delimiter //
mysql> create procedure proc03()
-> begin
-> declare i int default 6;
-> loop_label:loop
-> insert into t2 values (i,concat('usr',i));
-> set i=i+1;
-> if i>=9 then
-> leave loop_label;
-> end if;
-> end loop;
-> end;
-> //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
-----从上面这个例子可以看出,使用LOOP编写同样的循环控制语句要比使用while和repeat编写的要复杂一些:在循环内部加入了IF……END
IF语句,在IF语句中又加入了LEAVE语句,LEAVE语句的意思是离开循环,LEAVE的格式是:LEAVE 循环标号。
执行存储过程:
mysql> call proc03;
Query OK, 1 row affected (0.02 sec)
验证:
mysql> select * from t2;
+------+-------+
| id | name |
+------+-------+
| 10 | tom |
| 20 | jerry |
| 30 | rose |
| 40 | usr10 |
| 0 | usr0 |
| 1 | usr1 |
| 2 | usr2 |
| 3 | usr3 |
| 4 | usr4 |
| 5 | usr5 |
| 6 | usr6 |
| 7 | usr7 |
| 8 | usr8 |
+------+-------+
13 rows in set (0.00 sec)
相关文章推荐
- 利用mysql-proxy进行mysql数据库的读写分离
- mysql表分区
- mysql表修复问题---(table is marked as crashed and should be repaired)
- Ubuntu下彻底卸载mysql
- EF,MySQL
- 查看mysql数据库大小、表大小和最后修改时间
- mysql定时器
- Mysql文章笔记
- MYSQL双机热备、主从热备
- mysql in查询排序问题
- windows下修改mysql的数据库数据文件路径
- Mysql数据库导出导入
- EnvironmentError:mysql config not found
- How-to: Install hive with mysql metastore
- MYSQL问题解决方案:Access denied for user 'root'@'localhost' (using password:YES)
- servelet 连接mysql
- Ubuntu下忘记MySQL root密码解决方法
- [转] mysql中insert into select和create select用法
- Mysql参数
- mysql_real_connect连接问题