mysql表格数据删除磁盘释放问题
1、创建一个临时表并插入数据
1 CREATE TABLE `tf_b_student` ( 2 `ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增长ID', 3 `USER_ID` varchar(10) COLLATE utf8_bin DEFAULT '' COMMENT '业务类型', 4 `NAME` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '业务说明', 5 `AGE` int(11) DEFAULT '0' COMMENT '年龄', 6 `SEX` smallint(1) NOT NULL DEFAULT '1' COMMENT '1 男 2 女', 7 `CREATE_NAME` varchar(30) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人', 8 `CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间', 9 `DELETE_FLAG` smallint(1) DEFAULT '0' COMMENT '删除标识 0 否 1 是', 10 `VERSION` smallint(4) DEFAULT '1' COMMENT '版本号', 11 `UPDATE_TIME` datetime DEFAULT NULL COMMENT '最新更新时间', 12 `REMARK1` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '预留字段', 13 `REMARK2` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '预留字段', 14 `REMAKR3` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '预留字段', 15 `REMARK4` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '预留字段', 16 `REMAKR5` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '预留字段', 17 PRIMARY KEY (`ID`), 18 KEY `index_sex` (`SEX`), 19 KEY `index_name_age_sex` (`NAME`,`AGE`,`SEX`) 20 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='学生表';
2、对改表格进行数据的插入
DELIMITER // # 设置//为结束符,否则命令行中的;会与默认的;冲突 DROP PROCEDURE if EXISTS test; # 如果存在test存储过程则删除 CREATE procedure test() # 创建无参存储过程,名称为test BEGIN DECLARE i INTEGER DEFAULT 1; # 申明变量 用户判断是否继续循环 DECLARE rowNums INTEGER DEFAULT 0; # 申明变量 用于记录总影响行数 DECLARE limitRow INTEGER DEFAULT 2; # 申明变量 用于记录一次事务的影响行数 WHILE i<10000 DO # 结束循环的条件: 当上次刷新的影响行数<=0时跳出while循环 # 更新语句 INSERT INTO `coco`.`tf_b_student` ( `USER_ID`, `NAME`, `AGE`, `SEX`, `CREATE_NAME`, `CREATE_TIME`, `DELETE_FLAG`, `VERSION`, `UPDATE_TIME`, `REMARK1`, `REMARK2`, `REMAKR3`, `REMARK4`, `REMAKR5`) VALUES ( '1', '小名', '0', '1', 'test073109', '2020-05-22 15:24:13', '0', '1', '2020-05-22 15:24:17', NULL, NULL, NULL, NULL, NULL); SET i= i+1; END WHILE; # 结束while循环 SELECT rowNums; END; // DELIMITER ; #重新设置回;作为分割符 CALL test(); # 调用存储过程
3、对于插入数据的表格,查询该表格的磁盘空间为1.52M
select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') as table_size,table_schema from information_schema.tables where table_name='tf_b_student';
4、删除5000条数据后,查询容量依然为1.52.M
DELETE FROM tf_b_student where ID >5000;
5、执行空间优化语句后。查询容量为0.38M
optimize table tf_b_student ; select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') as table_size,table_schema from information_schema.tables where table_name='tf_b_student';
6、truncate 与drop均为DDL定义语言,会立刻释放磁盘空间。

浙公网安备 33010602011771号