delete,truncate,drop 删库跑路操作一技傍身

Mysql删除数据的方式有哪些?

常用的删除方式:通过delete,truncate,drop 关键字进行删除;三种都可以用来删除数据,but场景不同。

相比之下,执行速度

drop>truncate>delete

原理上:一.DELETE

DELETE FROM table_name WHERE 

1.DELETE属于数据库DML操作语言,只会删除数据不删除表结构,会走事务,执行时会触发trigger(后序我会在提到mysql触发器)

2.在InnoDB中,DELETE其实不会真的把数据删除,mysql实际上只是给删除的数据打了个标记为已删除,因此DELETE删除表中的数据时,表文件在磁盘上所占空间不会变小,存储空间不会被释放,只是把删除的数据行设置为不可见(你真的删了嘛)。苏然未释放磁盘空间,但是下次插入数据的时候,依然可以重用这部分空间(覆盖掉);

3.DELETE执行时,会将所删除数据缓存到rollback segement中,事务commit之后生效;

4.delete from table_name删除表数据,对于MyISAM会立即释放磁盘空间,InnoDB不会;

5.delete操作后使用optimize table table_name会立刻释放磁盘空间,支持InnoDB and MyISAM,所以想要达到释放磁盘空间目目的,delete后执行optimize table操作。对table进行优化

6.delete操作时一行行执行,同时会将该行的删除日志记录在redo和undo表空间

二.truncate

truncate table table_name

1.truncate:属于数据库DDL定义语言,不走事务,原数据不放到rollback segment中,操作不触发tigger;

执行后立即生效,无法找回(开始起跑,别回头)

2.truncate table table_name立刻释放磁盘空间,支持InnoDB and MyISAM. truncate table 类似 drop table ->create ,速度接近drop table速度;

3.truncate 能够快速清空某表,并且重置auto_increment的值;

   对于MyISAM,truncate 会重置auto_increment的值=1,而delete后仍常保持auto_increment.

   对于InnoDB,truncate 会重置auto_increment的值=1,delete后仍然保持auto_increment ,但是delete后重启mysql,则auto_increment = 1;

InnoDB无法持久保存auto_increment,delete之后auto_increment保存在内存,但是重启即丢失,从1开始;

三,drop

1.drop属于DDL语言;

执行后立即生效,无法找回(开始起跑,别回头)

2.drop table table_name 立刻释放磁盘空间,支持InnoDB and MyISAM;drop语句会删除表结构,依赖约束,触发器,索引;

  依赖于该表的存储过程/函数保留,为invaild状态;

所有的删库跑路只有一个条件:你必须跑的够快!!!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值