[心得]详解MySQL三种删除表的方法

大家都知道,删除表有三种方法:drop,delete,和truncate。工作中有时候图省事,全部drop掉。但没有仔细分析为啥drop最省事。这个问题经常在面试中被问到。

drop,不带where子句的delete,以及truncate都会删除表内数据。

不同的方面如下:
1. delete是一种DML,它会放到rollback segment,事务提交之后才生效。如果有对应的触发器,那么执行时还会触发trigger。
truncate,drop是DDL,操作立即生效,也就意味着不能回滚。
2. truncate和delete不删除表的结构,drop将删除表的结构被依赖的约束,触发器,索引;依赖于表的存储过程/函数将被保留,但是变为invalid状态。
3. delete语句不影响表所占用的extent,high watermark不动。drop语句将最大限度释放该表所占的空间。truncate语句缺省情况下将空间释放到最小个extent,除非使用reuse storage,那种情况下下truncate将空间恢复到最大个extent。
4. 速度上,drop>truncate>delete
5. 安全性,drop和druncate都不能回滚,因此慎用。
6. 使用上,想删部分数据行,用带where子句的delete命令。想删除表,用drop。想保留表而将所有数据删除,并且和事务无关,用truncate;如果和事务有关,还是用delete。如果想整理表内碎片,用truncate加上reuse_storage,再重新导入/插入数据。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值