delete和truncate的区别和联系
从语言的角度来看
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://blog.csdn.net/lmy86263/article/details/61660922
立志如山 静心求实
浙公网安备 33010602011771号