加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql数据批量删除并且梳理表碎片方法

发布时间:2023-10-14 15:16:49 所属栏目:MySql教程 来源:
导读:本文主要给大家介绍mysql数据批量删除并且整理表碎片方法,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下mysql数据批量删除并且整理表碎片方法吧。
本文主要给大家介绍mysql数据批量删除并且整理表碎片方法,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下mysql数据批量删除并且整理表碎片方法吧。
 
DROP PROCEDURE IF EXISTS prc_del_loop;
 
CREATE  PROCEDURE prc_del_loop()
 
BEGIN
 
DECLARE v_count INT ;
 
DECLARE v_data_free INT;
 
my_del_loop:LOOP  
 
delete from t_data where  adress = '苏州日志分析苏州日志分析' limit 10000;
 
select count(1) into v_count from (
 
select * from t_data where adress = '苏州日志分析苏州日志分析' limit 1 ) d;
 
IF v_count=0 THEN        
 
LEAVE my_del_loop;
 
END IF;
 
END LOOP my_del_loop;
 
SELECT "TABLE DATA HAD DELETED !!!";
 
#整理碎片,data_free大于等于100M进行整理
 
select round(sum(data_free/1024/1024),0) into v_data_free
 
from information_schema.tables where TABLE_SCHEMA= 'data' and table_name = 't';
 
IF v_data_free >=100 THEN
 
SELECT "TABLE SHRINK IS RUNNING!!!";
 
alter table t ENGINE=INNODB;
 
SELECT "TABLE SHRINK IS FINISHED!!!";
 
ELSE
 
SELECT "TABLE SHRINK IS NOT NEED SHRINK!!!";
 
END IF;
 
END;
 
mysql数据批量删除并且整理表碎片方法
 
使用游标来进行删除:
 
drop PROCEDURE if EXISTS prc_del_loop_cur;
 
CREATE PROCEDURE prc_del_loop_cur()
 
BEGIN
 
DECLARE v_name VARCHAR(2000);
 
DECLARE v_id BIGINT;
 
DECLARE done INT DEFAULT 0;
 
DECLARE cur1 CURSOR FOR SELECT id,name from test where adress = '苏州日志分析苏州日志分析';
 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
 
open cur1;
 
my_del_loop:LOOP  
 
fetch cur1 into v_id,v_name;
 
IF done=1 THEN  
 
LEAVE my_del_loop;  
 
END IF;  
 
delete from test where  id = v_id;
 
END LOOP my_del_loop;
 
CLOSE cur1;  
 
SELECT "delete over !!!";
 
END;
 
call prc_del_loop_cur;
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章