查看: 654|回复: 2

浅谈Mysql存储过程

 关闭 [复制链接]

签到天数: 2592 天

连续签到: 6 天

[LV.Master]至尊海神IIIIII

发表于 2010-7-31 22:15 | 显示全部楼层 |阅读模式
浅谈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)
<
PCOS系统下载站:http://zhuangji.wang

签到天数: 1092 天

连续签到: 0 天

[LV.10]逍遥海仙III

发表于 2010-7-31 22:25 | 显示全部楼层
对我这样的菜鸟太有帮助了谢谢楼主分享
PCOS系统下载站:http://zhuangji.wang
回复 支持 反对

使用道具 举报

签到天数: 1036 天

连续签到: 0 天

[LV.10]逍遥海仙III

发表于 2010-8-1 08:54 | 显示全部楼层
进来学习一下!
PCOS系统下载站:http://zhuangji.wang
回复 支持 反对

使用道具 举报

本版积分规则