MySQL的delete操作对表空间的影响

delete操作的几种情况

  1. drop操作: 不管什么引擎,Innodb还是myisam都会释放磁盘空间
  2. truncate操作: truncate和drop一样都会释放磁盘空间,但与drop不同的是,truncate=drop+create,就是会新建一张空表,保留了mysql的表结构
  3. delete操作:
    • delete from table_name删除了全部数据,对于myisam会释放磁盘空间,innodb不会释放
    • delete from 带where的删除都不会释放磁盘空间,可以使用optimize table name进行释放

分析

1.删除后并不会把数据从表中删除,而是以碎片形式继续存在表空间,可以使用命令来查看

show table status like 'table_name';

2.data_free表示碎片的大小

3. 使用optimize优化

optimize table table_name;
  1. 优化后的对比
    在这里插入图片描述

存储引擎区别

  1. innodb:
  • 支持事务,外键,行级锁,
  • 属于索引组织表,可以使用共享表空间存储或多表空间存储
    • 共享表空间存储与myisam一样,以表名开头,拓展名是frm;索引文件和数据文件都保存在一个表空间里
    • 使用多表空间存储,每个表都有一个表空间文件用于存储每个表的数据和索引
  1. myisam:
  • 不支持外键,事务,属于堆表
  • 在磁盘存储上有三个文件: frm用于存储表的定义;myd用于存放数据;myi用于存放表索引
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,如果你误删除了数据,你可以通过以下方法尝试恢复: 1. **使用`REVOKE`语句撤销权限**:如果你是在某个用户或角色下执行的删除操作,可以通过`REVOKE`命令撤销对表的操作权限,然后再重新授予权限,这可能无法找回已删除的数据,但可以防止进一步的修改。 ```sql REVOKE ALL PRIVILEGES ON table_name.* FROM user; GRANT ALL PRIVILEGES ON table_name.* TO user; ``` 2. **利用`binlog`恢复**:如果你启用了二进制日志(`innodb_log_file_size`设置足够大),并且开启了`binlog_format=ROW`模式,可以使用`mysqlbinlog`工具和`pt-rotation`等第三方工具尝试从binlog中还原数据。请注意,这需要数据库配置正确,以及在删除数据后未做过多写操作。 3. **使用`INNODB`引擎的特性**: - **Undo Log(撤销日志)**:对于InnoDB存储引擎,数据被删除后还可能存在于undo log中。你可以尝试重启数据库,使用`SHOW ENGINE INNODB STATUS`检查undo log状态,然后使用`UNDONED_LOG`系统表尝试恢复。这通常适用于最近的删除操作。 - **Transaction Rollback**:如果删除操作在一个事务中,可以通过回滚事务(`ROLLBACK`)来撤销。 4. **物理备份和逻辑备份**:如果定期进行了物理备份(如全量备份),可以使用备份恢复数据。如果没有物理备份,但有逻辑备份(如InnoDB的增量备份),可能需要结合第三方工具恢复。 然而,以上方法并不能保证100%恢复所有删除的数据,尤其是当数据已被覆盖或数据库进行了大量写入后,恢复的成功率大大降低。因此,建议定期备份并谨慎操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值