从上表可以看出,delete和truncate删除数据会有以下四点不同:
①delete支持条件删除
所谓条件删除,即有条件地删除数据。比如,delete删除数据可以用where语句,如
delete from 表名 where 列名=值;
delete可以删除指定的列的数据,但truncate只能删除整个表中的数据;
②事务回滚
我理解的事务回滚,即撤销操作。当你使用一个SQL语句进行了一项操作之后,你可以通过事务回滚回到原来的状态。
读者可以通过以下操作体验:
读者可以在开启事务回滚之后,使用rollback语句,看看数据是否回归。
③清理速度
在前两条比较中,delete语句相比于truncate语句更加地支持个性化,也更加安全,但在该条比较中,truncate更加具有优势。
在删除少量数据时,delete语句和truncate删除速度几乎没有区别,但在删除大量数据时,truncate删除速度更快。
在第二项中,delete语句支持事务回滚,也就是说,该语句执行一次,会在事务日志中为删除的数据记录一行。随着大量的删除,会导致事务日志记录过多而导致执行速度变慢。
而truncate虽然不支持事务回滚,但在删除大量数据时,速度会明显快于delete操作。
④ truncate语句支持高水位重置
随着对一个数据库的增删改查的大量执行,会不断提高表的高水位线(HWM)。而使用truncate语句,会重置表的高水位线,之后再进行DML操作,速度也会提升。