MySQL中delete和truncate的区别和联系

    xiaoxiao2021-03-25  65

    从效果上来看,delete from tableA,与truncate table tableA的作用是一样的,如果delete后面不添加where条件过滤,而且与drop table tableA,接着create table tableA的效果也是相同的。但是本质上,两者是完全不同的。

    一、 从语言的角度来看

    delete是DML类型的语句;而truncate是DDL类型的语句,执行truncate需要drop权限,而且由于它是DDL语句,是通过删除表,然后再重建实现的,所以执行的时候要比delete性能高很多,因为不需要一行一行的去删除数据。

    二、 从事务的角度来说

    delete 过程如果出现错误,事务是可以回滚的,但是truncate操作时是不会造成回滚的,因此更需要小心,所以才需要授予drop的权限。

    三、 从执行效果来看

    delete的使用范围更广,因为它可以删除符合条件的数据行,而不一定是整体;但是truncate只能删除整体。delete会返回删除数据的行数,但是truncate只会返回0,这个没有任何意义。在存储引擎为InnoDB的数据库服务器中,truncate无法删除一个表中的数据,如果这个表的主键作为了另一个表的外键,无论这个外键是否存在,这是由于drop表限制的;但是delete是可以实现,只要的这个主键在另一个表中的外键不存在即可。在InnoDB中,对于AUTO_INCREMENT的列来说,当在truncate之后,改列的第一个值仍从1开始,但是delete仍然使用顺序使用删除之前的值。
    转载请注明原文地址: https://ju.6miu.com/read-37427.html

    最新回复(0)