下面是存储过程的例子,删除给定球员参加的所有比赛:
mysql> delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义) mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER) -> BEGIN -> DELETE FROM MATCHES -> WHERE playerno = p_playerno; -> END$$ Query OK, 0 rows affected (0.01 sec) mysql> delimiter; #将语句的结束符号恢复为分号
解析:默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀。 在定义过程时,使用 DELIMITER $$ 命令将语句的结束符号从分号 ; 临时改为两个 $$,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释。
调用存储过程:
call sp_name[(传参)];
MySQL存储过程的查询
select name from mysql.proc where db='数据库名';
或者
selectroutine_name from information_schema.routines where routine_schema='数据库名';
或者
show procedure status where db='数据库名';
=============================================
操作举例:
-- 查询存储过程
elect name from mysql.proc where db='accl_ne_uc_ft2' and `type` = 'PROCEDURE' ;
-- 删除存储过程
DROP PROCEDURE zqtest
--- 100000000
-- 100001000
-- 创建存储过程
DROP PROCEDURE IF EXISTS zqtest;
delimiter $$$ -- 声明语句结束符,可以自定义
create procedure zqtest() -- 声明存储过程
begin -- 存储过程开始
declare i int default 0;
set i=100000000;
start transaction;
while i<100001000 do
-- 要执行的sql语句
insert into `um_address` (`id`, `ada`) values(i,'54864490')
set i=i+1;
end while;
commit;
end -- 存储过程结束
$$$
-- 执行存储过程
call zqtest();