MySQL procedure存储过程示例

来源:互联网 发布:带着淘宝穿古代 编辑:程序博客网 时间:2024/06/04 20:00

    前面讨论过,在做排行榜数据更新时,比较适合使用存储过程,原因有以下几点:

        1、生成存储过程时将要执行的数据库语句编译后存入数据库,避免每次执行都要编译的麻烦,提高效率。

        2、存储过程可以在需要的时候随时调用简单的 call basename.procname() 语句即可,方便调试与测试。

        3、可以与程序交互,调用返回时表示存储过程执行完毕,如果成功则可以让程序放心地拉数据,如果失败则会返回错误原因。

    当然,存储过程的用处远远不止于此。存储过程的编写基本上有以下格式:

DROP PROCEDURE IF EXIST UPDATE_RANK;DELIMITER //CREATE PROCEDURE UPDATE_RANK()BEGIN---------------------------- do something--------------------------END ;//DELIMITER ;
    其中,DELIMITER可以指定语句的结束符。在创建存储过程时可以在括号中指定输入或输出变量:in/out  varname  vartype ,in表示在执行时向数据库输入,out则可以将存储过程之后的变量返回。要执行则调用 call UPDATE_RANK(); 即可。

    以下则是一个实际的例子,虽然有些牵强:

DELIMITER $$DROP PROCEDURE IF EXIST create_accounts$$create procedure `create_accounts`(in maxcount int , in prefix char(72))BEGINdeclare i int default maxcount;while i > 0doinsert into account set id=i,name=CONCAT(prefix,i);set i = i - 1;end while;end$$DELIMITER ;call create_accounts(1000 , 'test');
    这个例子是往账号表中批量插入测试账号的,指定了两个输入变量,一个是账号数量,另一个则是账号名的前缀。最后在调用call之后则会插入1000个test*的账号名到账号表。