签到天数: 2592 天 连续签到: 6 天 [LV.Master]至尊海神IIIIII
|
浅谈Mysql存储过程
自从来到现在公司以后,大部分时间都是在使用sqlserver2005。所以经常会用到存储过程、job。接触的多了自然而然就觉得sqlserver的客户端的强大、方便。这次是为了直接在discuz里生成若干条注册邀请码,想着直接写库多方便啊,就顺便把mysql的存储过程看了下。
其实从mysql5就已经开始支持存储过程及触发器,phpmyadmin中不支持直接编写对存储过程(我自己写了几次),所以就直接命令行吧:
/*这里才是真正的起点,首先看看该表的数据*/
mysql> select count(*) from cdb_invites;
+----------+
| count(*) |
+----------+
| 261 |
+----------+
1 row in set (0.00 sec)
PS,以下这段要注意的地方:
第一句:delimiter // 这是用mysql客户端delimiter命令来把语句定界符从 ;变为//
第二句:创建一个存储过程名称为:hi。没有参数需要传入
中间的就是声明局部变量,然后循环插入。
最后一句:end // 这才是真正的结束。
然后从现在开始,除非重新登录mysql。否则当前你操作的命令都是以 //结尾。
/*创建一个存储过程,目的是为向某个表循环插入若干条数据*/
mysql> delimiter //
mysql> create procedure hi()
-> begin
-> declare a int(10);
-> set a=1;
-> while a<100 do
-> insert into cdb_invites values (1,1279616286,1280480286,'10.0.7.7',a,0,0,1);
-> set a=a+1;
-> end while;
-> end //
Query OK, 0 rows affected (0.00 sec)
/*调用一次该存储过程。后查看该表,增加了99条新数据*/
mysql> call hi()//
Query OK, 1 row affected (0.01 sec)
mysql> select count(*) from cdb_invites//
+----------+
| count(*) |
+----------+
| 360 |
+----------+
1 row in set (0.00 sec)
/*显示创建存储过程hi的字符串内容*/
mysql> show create procedure hi//
+-----------+----------+----------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------+
| hi | | CREATE DEFINER=`root`@`localhost` PROCEDURE `hi`()
begin
declare a int(10);
set a=1;
while a<100 do
insert into cdb_invites values (1,1279616286,1280480286,'10.0.7.7',a,0,0,0);
set a=a+1;
end while;
end |
+-----------+----------+----------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
/*显示现有的存储过程*/
mysql> show procedure status//
+-----------------+--------------------+-----------+----------------+---------------------+---------------------+-----------
----+---------+
| Db | Name | Type | Definer | Modified | Created | Security_type | Comment |
+-----------------+--------------------+-----------+----------------+---------------------+---------------------+----------+
| mhqy_bbs | hi | PROCEDURE | root@localhost | 2010-07-22 13:39:51 | 2010-07-22 13:39:51 | DEFINER | |
| mhqy_bbs | p1 | PROCEDURE | root@localhost | 2010-07-20 17:13:26 | 2010-07-20 17:13:26 | DEFINER | |
+-----------------+--------------------+-----------+----------------+---------------------+---------------------+----------+
2 rows in set (0.00 sec)
/*删除一个已有的存储过程,没搞懂mysql的alter,所以宁愿删除了再重新create */
mysql> drop procedure p1//
Query OK, 0 rows affected (0.00 sec) |
<
|