一、權限問題mysql
alter routine 編輯或刪除存儲過程sql
create routine 創建存儲過程數據庫
execute 建立存儲過程工具
二、存儲過程相關的一些命令fetch
show procedure status\G 查看數據庫中有哪些存儲過程spa
show procedure status where db = 'db_name'\G 查看指定數據庫(db_name)中有哪些存儲過程orm
select name from mysql.proc where db = 'db_name'; 查看指定數據庫(db_name)中有哪些存儲過程編譯器
select routine_name from information_schema.routines where routine_schema = 'db_name'; 查看指定數據庫(db_name)中有哪些存儲過程it
show create procedure dbname.sp_delete_bakhistory_new \G 查看存儲過程的詳細內容io
三、MySQL 存儲過程刪除大表
CREATE PROCEDURE `sp_delete_bigtable_60`( )
BEGIN
declare v_id int;
declare stopflag int;
declare v_num int;
declare cursor_id cursor for select id from bigtable where gmt_created<now()-interval 60 day;
declare continue handler for not found set stopflag=1;
open cursor_id;
repeat
fetch cursor_id into v_id;
begin
delete from bigtable where id =v_id;
end;
set v_num=v_num+1;
if mod(v_num,100)=0 then
commit;
end if;
until stopflag = 1
end repeat;
close cursor_id;
END;
//
delimiter ;
須要注意的是DELIMITER //和DELIMITER ;兩句,DELIMITER是分割符的意思,由於MySQL默認以";"爲分隔符,若是咱們沒有聲明分割符,那麼編譯器會把存儲過程當成SQL語句進行處理,則存儲過程的編譯過程會報錯,因此要事先用DELIMITER關鍵字申明當前段分隔符,這樣MySQL纔會將";"當作存儲過程當中的代碼,不會執行這些代碼,用完了以後要把分隔符還原。
若是是用MySQL的Administrator管理工具時,能夠直接建立,再也不須要聲明。