MySQL------truncate和delete 的区别

truncate:删除内容,释放空间,但不删除定义。(表结构还在,数据删除)

truncate table test;

delete:删除内容,不删除定义,也不释放空间。

truncate table test;

释放空间:
delete删除的行数据是不释放空间的,如果表id是递增式的话,那么表数据的id就可能不是连续的;
而通过truncate删除数据是释放空间的,如果表id是递增式的话,新增数据的id又是从头开始,而不是在已删数据的最大id值上递增。

delete和truncate的区别

1、delet删除数据时,是一行一行地删除,每删除一行数据,就在事务日志中为删除的那行数据做一项记录,因此可对delete操作进行回滚(roll back);

truncate删除数据时,是通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放;

truncate 的执行速度比 delete 快,且使用的系统和事务日志资源少;

2、delete 可以删除部分行数据, truncate 只能删除表中所有数据。

3、delete语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的触发器(trigger),执行的时候将被激活。
truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不激活触发器(trigger)。

4、truncate 在删除表中的所有行后,表的结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用delete。

5、truncate 将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过 truncate 操作后的表比Delete操作后的表要快得多。

6、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。

7、truncate 不能清空父表。

8、truncate 不能用于参与了索引视图的表。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值