MySQL 存儲過程刪除大表


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`( )
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管理工具時,可以直接創建,不再需要聲明。
 
 
 
 
 
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM