mysql之delete删除记录后数据库大小不变
当DELETE后面跟条件的时候,则就会出现这个问题
delete from table_name where 条件
删除数据后,数据表占用的空间大小不会变。
不跟条件直接delete的时候。
delete from table_name
清除了数据,同时数据表的空间也会变为0
如果已经删除了表数据的很大一部分,或者有很多变化和变长表行(VARCHAR表,VARBINARY、BLOB或文本列)进行了更改,因为删除操作后在数据文件中留下碎片所致。DELETE只是将数据标识位删除,并没有整理数据文件,当插入新数据后,会再次使用这些被置为删除标识的记录空间,可以使用OPTIMIZE TABLE来回收未使用的空间,并整理数据文件的碎片。
OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。
OPTIMIZE TABLE 表名;
针对myisam引擎,使用optimize table 还有如下功能:
If the table has deleted or split rows, repair the table. [修复表] If the index pages are not sorted, sort them. [索引未排序,会排序] If the table's statistics are not up to date (and the repair could not be accomplished by sorting the index), update them.[若表的统计信息不是最新的,更新它]
对myiam数据表进行批量删除后,发现空间没有回收,要通过optimize table来回收空间
以上所述是小编给大家介绍的mysql之delete删除记录后数据库大小不变的相关知识,希望对大家有所帮助!
相关推荐
-
mysql 删除操作(delete+TRUNCATE)
delete 语法 单表语法: DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [WHERE where_definition] [ORDER BY ...] [LIMIT row_count]多表语法: DELETE [LOW_PRIORITY] [QUICK] [IGNORE] tbl_name[.*] [, tbl_name[.*] ...] FROM table_references
-
MySQL删除数据Delete与Truncate语句使用比较
空mysqll表内容常见的有两种方法:一种delete,一种是truncate . 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容.效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据. 其语法结构为: 复制代码 代码如下: TRUNCATE [TABLE] tbl_name 这里简单的给出个示例, 我想删除 friends 表中所有的记录,可以使用如下语句: 复
-
mysql delete 多表连接删除功能
单个表的删除: DELETE FROM tableName WHERE columnName = value; 删除表内的所有行: 即:保留表的结构.属性.索引 DELETE FROM tablename; DELETE * FROM tablename; 删除同一张表内的所有内容(删除数据.表结构) TRUNCATE customer; 无法报告删除了几行,且只能用于单一表 多表连接删除: DELETE orders,itrms FROM orders,items WHERE orders.u
-
MySQL防止delete命令删除数据的两种方法
方法一我常用的做法,就是在数据库中加一个删除标识字段,如: isdel=1 这样就代码删除的字段了 方法二直接限制mysql删除 启动MySQL的时候加上参数 -U -U, --safe-updates Only allow UPDATE and DELETE that uses keys. 他的作用是防止执行delete的时候没带有条件语句,如果没加上where则语句不执行.
-
mysql支持跨表delete删除多表记录
前几天写了Mysql跨表更新的一篇总结,今天我们看下跨表删除. 在Mysql4.0之后,mysql开始支持跨表delete. Mysql可以在一个sql语句中同时删除多表记录,也可以根据多个表之间的关系来删除某一个表中的记录. 假定我们有两张表:Product表和ProductPrice表.前者存在Product的基本信息,后者存在Product的价格. 第一种跨表删除的方式是不用join,在delete时指定用半角逗号分隔多个表来删除,如下sql语句: 复制代码 代码如下: DELETE p.
-
mysql之delete删除记录后数据库大小不变
当DELETE后面跟条件的时候,则就会出现这个问题 delete from table_name where 条件 删除数据后,数据表占用的空间大小不会变. 不跟条件直接delete的时候. delete from table_name 清除了数据,同时数据表的空间也会变为0 如果已经删除了表数据的很大一部分,或者有很多变化和变长表行(VARCHAR表,VARBINARY.BLOB或文本列)进行了更改,因为删除操作后在数据文件中留下碎片所致.DELETE只是将数据标识位删除,并没有整理数据文件,
-
MySQL delete删除数据后释放磁盘空间的操作方法
目录 一.删除表|清空数据表 二.删除表数据 三.优化表空间 当 MySQL 数据库服务删除部分数据后:有些情况下这些数据占用的存储空间会释放掉,有些情况这些存储空间则不会释放.以下是对这种情况的简单说明: 一.删除表|清空数据表 当执行删除数据表或者清空数据表的全部数据操作时,都会释放掉相应的磁盘存储空间. drop table table_name; truncate table table_name; 在MyISAM和InnoDB(innodb_file_per_table)存储引擎中,数
-
浅谈为什么MySQL不建议delete删除数据
前言 我负责的有几个系统随着业务量的增长,存储在MySQL中的数据日益剧增,我当时就想现在的业务方不讲武德,搞偷袭,趁我没反应过来把很多表,很快,很快啊都打到了亿级别,我大意了,没有闪,这就导致跟其Join的表的SQL变得很慢,对的应用接口的response time也变长了,影响了用户体验. 事后我找到业务方,我批评了他们跟他们说要讲武德,连忙跟我道歉,这个事情才就此作罢,走的时候我对他们说下次不要这样了,耗子尾汁,好好反思. 骂归骂,事情还是得解决,时候我分析原因发现,发现有些表的数据量增长
-
MySQL两种删除用户语句的区别(delete user和drop user)
Tip: 在MySQL中,我们经常需要创建用户和删除用户,创建用户时,我们一般使用create user或者grant语句来创建,create语法创建的用户没有任何权限,需要再使用grant语法来分配权限,而grant语法创建的用户直接拥有所分配的权限.在一些测试用户创建完成之后,做完测试,可能用户的生命周期就结束了,需要将用户删除,而删除用户在MySQL中一般有两种方法,一种是drop user,另外一种是delete from mysql.user,那么这两种方法有什么区别呢?我们这里通过例
-
用PHP进行MySQL删除记录操作代码
首先我们新建数据显示页面view.php: 复制代码 代码如下: <?php $link=mysql_connect("localhost","root","管理员密码"); mysql_select_db("infosystem", $link); $q = "SELECT * FROM info"; mysql_query("SET NAMES GB2312");
-
Mysql InnoDB删除数据后释放磁盘空间的方法
Innodb数据库对于已经删除的数据只是标记为删除,并不真正释放所占用的磁盘空间,这就导致InnoDB数据库文件不断增长. 如果在创建数据库的时候设置innodb_file_per_table=1,这样InnoDB会对每个表创建一个数据文件,然后只需要运行OPTIMIZE TABLE 命令就可以释放所有已经删除的磁盘空间. 运行OPTIMIZE TABLE 表名后,虽然最后会报Table does not support optimize, doing recreate + analyze in
-
MySQL创建和删除数据库的命令及相关PHP脚本的操作方法
使用 mysqladmin 创建数据库 使用普通用户,你可能需要特定的权限来创建或者删除 MySQL 数据库. 所以我们这边使用root用户登录,root用户拥有最高权限,可以使用 mysql mysqladmin 命令来创建数据库. 实例 以下命令简单的演示了创建数据库的过程,数据名为 TUTORIALS: [root@host]# mysqladmin -u root -p create TUTORIALS Enter password:****** 以上命令执行成功后会创建 MySQL 数
-
Mysql学习心得之插入、更新、删除记录
下面通过图文并茂的方式给大家详解Mysql学习心得之插入.更新.删除记录. 插入记录 复制代码 代码如下: Insert[]into] tb1_name[(col_name,-..)] 自动编号的字段,可以用values default Default 可以赋予默认值 复制代码 代码如下: INSERT USERS VALUES(NULL,'TOM','123',25,1); 可以同时插入多条记录 复制代码 代码如下: INSERT users VALUES(DEFAULT,'TOM','123
-
Mysql下自动删除指定时间以前的记录的操作方法
关于Event:mysql5.1版本开始引进event概念.event既"时间触发器",与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存储过程使用,在某一特定的时间点,触发相关的SQL语句或存储过程. 首先删除2天以前记录的SQL语句(webserver_monitormemory为表名,time为时间字段): delete From webserver_monitormemory where DATE(time) &
-
MySQL Delete 删数据后磁盘空间未释放的原因
问题描述 在 MySQL 中使用 delete 语句删除数据之后,监控视图中可用的磁盘空间没有增加,磁盘使用率没有下降等等. 解决方案 delete 不释放空间是 MySQL 自身机制的原因,需要重建表才可以释放磁盘空间,可以参考的操作: 执行 optimize table ${table_name}. 如果是 InnoDB 的表,执行 alter table ${table_name} engine = innodb. 需要注意以下两个问题: 这两个命令都会重建表,尽量不要在磁盘空间紧张(>9
随机推荐
- Ajax中解析Json的两种方法对比分析
- 创建Guid 的代码
- 从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
- Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录
- java位运算加密示例
- 深入理解Mybatis二级缓存
- python计算最小优先级队列代码分享
- 学习python (1)
- 如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
- 探析浏览器执行JavaScript脚本加载与代码执行顺序
- PHP实现的简单缓存类
- 传智播客java web 过滤器
- C#中使用IrisSkin2.dll美化WinForm程序界面的方法
- 老生常谈onBlur事件与onfocus事件(js)
- Java中Json字符串直接转换为对象的方法(包括多层List集合)
- sqlserver清除完全重复的数据只保留重复数据中的第一条
- jQuery探测位置的提示弹窗(toolTip box)详细解析
- SignalR Self Host+MVC等多端消息推送服务(二)
- alert中断settimeout计时功能
- 解析Java中PriorityQueue优先级队列结构的源码及用法