当前位置:   article > 正文

truncate和delete的区别

truncate和delete的区别

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

  1. --删除表中所有数据
  2. DELETE FROM table_name;
  3. --删除表中部分符合条件的数据
  4. DELETE FROM table_name WHERE 【】;
  5. --删除表中所有数据
  6. 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,删除一些备份表,和测试表也要慎用,别写错表名了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/409618
推荐阅读
相关标签
  

闽ICP备14008679号