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定义语言,会立刻释放磁盘空间。

 

 

 

 

    

posted @ 2020-10-29 11:07  阳光麦田的博客  阅读(233)  评论(0)    收藏  举报