MySQL 存储过程删除大表

一、权限问题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 存储过程删除大表

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管理工具时,能够直接建立,再也不须要声明。
相关文章
相关标签/搜索