本文共 1740 字,大约阅读时间需要 5 分钟。
需求:在项目的开发中,可能需要手动制造一些仿真数据,此时需要用到MySQL中的存储过程。(即如何在Mysql中写for循环语句)
(1)创建存储过程
delimiter //
drop procedure if exists tim;
create procedure tim(count int)
begin
declare i int;
set i=1;
while i<count do
insert into province (name) values (i);
set i=i+1;
end while;
end //
需要注意的:
(1)由于mysql中对于输入分号符号“;”时,会立即执行该语句,这显然在for循环中不可行,因此,需要重新定义分解符即通过delimiter//,将分解符由原来的分号改为//。当代码输入完成时,需要输入//。
(2)当成功创建完存储过程后,需要更改分界符为原来的分号,因此,需要再次输入delimiter ;,修改为有分号执行语句。
(3)在MySql中对于存储过程的区分只定义到函数名,因此不允许创建重名但是不同参数的存储过程。即如果创建了一个tim(),此时再创建tim(count int)则会报存储名称已经存在。
(2)执行存储过程
call tim(1000);
(3)查看存储过程
查看存储过程有好几种形式,这里给出一种最简单的形式。
show procedure status;
mysql> show procedure status;
+------+------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+------+------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| chen | tim | PROCEDURE | root@localhost | 2017-03-27 17:13:30 | 2017-03-27 17:13:30 | DEFINER | | utf8 | utf8_general_ci | utf8_bin |
| chen | tim2 | PROCEDURE | root@localhost | 2017-03-27 17:27:37 | 2017-03-27 17:27:37 | DEFINER | | utf8 | utf8_general_ci | utf8_bin |
+------+------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
(4)删除存储过程
两种方式,其本质是一样的:
方式一:
drop procedure if exist tim; //先判断是否存在存储过程名称为tim,如果存在则删除
方式二:
drop procedure tim; //直接删除存储过程为tim
转载地址:http://uqomi.baihongyu.com/