下面是存儲過程的例子,刪除給定球員參加的所有比賽:
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();