mysql 怎么删除八小时之前的表

图片说明就比如要删除这些以时间为表名的表

  1. 创建存储过程实现删除如下:

delimiter $
create procedure dropTablePro(in h int(2), in m int(2), in suffix varchar(8))
begin
/* h 小时 , m 分钟 */

-- 小时计数器
declare h_cnt int(2) default 1;
-- 分钟计数器
declare m_cnt int(2) default 1;
declare tab_name varchar(32) default '';

loop1: while(h_cnt <= h) do
    loop2: while(m_cnt <= m) do
        -- 拼接表名
        if(m_cnt < 10) then
            set tab_name = concat(date_format(date_sub(now(), interval h_cnt hour), '%Y%m%d%H'), '0', CAST(m_cnt AS CHAR), suffix);
        else 
            set tab_name = concat(date_format(date_sub(now(), interval h_cnt hour), '%Y%m%d%H'), CAST(m_cnt AS CHAR), suffix);
        end if;

        set @dropSql = concat('drop table if exists ', tab_name);
        prepare droptab from @dropSql;
        execute droptab;
        deallocate prepare droptab;
                    set m_cnt = m_cnt + 1;
    end while loop2; 

            set m_cnt = 1;
            set h_cnt = h_cnt + 1;
end while loop1;

end;
delimiter ;

  1. 调用存储过程实现删除: call dropTablePro(2, 60, 'abc'); 说明:删除当前时间前两小时,且后缀为 'abc' 的表; 具体使用请参考自己的表名。