truncate和delete的区别

        两者都可以删除表中的数据,但是本质上是有区别的,两者使用方法如下:

--删除表中所有数据
DELETE FROM table_name;
--删除表中部分符合条件的数据
DELETE FROM table_name WHERE 【】;

--删除表中所有数据
TRUNCATE TABLE table_name;

1、SQL语言上的区别

  • delete:属于 DML(数据操作语言) 范畴
  • truncate:属于 DDL(数据定义语言) 范畴

2、操作对象不同

  • delete:操作对象是表中的每行数据,属于行级别。可以通过在后面添加where条件删除部分数据。
  • truncate:操作对象是表,不能加where条件,一执行就是删除了整个表。

3、是否会释放空间和能否回滚

  • delete:删除的行数据是不释放空间的,每删除一行数据,就在事务日志中为删除的那行数据做一项记录,因此可对delete操作进行回滚(roll back);如果表id是递增式的话,那么表数据的id就可能不是连续的;
  • truncate:是通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放,所以删除不能回滚。

4、删除效率

  • delete:逻辑删除,走事务,有binlog记录,必然效率慢
  • truncate:物理删除,直接删除存储数据的数据页,不走事务没有日志记录,必然快。

5、外键约束

  • delete:可以通过sql语句,根据外键有序的删除本表和相关表中的数据。比如删除部门表中的数据,也可以吧用户表中的数据关联删除。
  • truncate:存在外键约束,则删除失败。比如员工表关联了部门表,即使员工表中没有数据,只要外键关联存在,部门表就删不掉。

6、使用场景

慎用、慎用 truncate,删除一些备份表,和测试表也要慎用,别写错表名了。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值