標籤:style blog color os io 資料 for 問題
1、許可權問題
alter routine 編輯或刪除預存程序create routine 建立預存程序execute 建立預存程序
2、預存程序相關的一些命令
show procedure status\G 查看資料庫中有哪些預存程序show procedure status where db = ‘db_name‘\G 查看指定資料庫(db_name)中有哪些預存程序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)中有哪些預存程序show create procedure dbname.sp_delete_bakhistory_new \G 查看預存程序的詳細內容
3、MySQL 預存程序刪除大表
delimiter //CREATE PROCEDURE `sp_delete_bigtable_60`( )BEGINdeclare 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 = 1end repeat; close cursor_id;END;//delimiter ;
需要注意的是DELIMITER //和DELIMITER ;兩句,DELIMITER是分割符的意思,因為MySQL預設以";"為分隔字元,如果我們沒有聲明分割符,那麼編譯器會把預存程序當成SQL語句進行處理,則預存程序的編譯過程會報錯,所以要事先用DELIMITER關鍵字申明當前段分隔字元,這樣MySQL才會將";"當做預存程序中的代碼,不會執行這些代碼,用完了之後要把分隔字元還原。如果是用MySQL的Administrator管理工具時,可以直接建立,不再需要聲明。