1、在MySQL中有两种方法可以删除数据,一种是MySQL DELETE语句,另一种是MySQL TRUNCATE TABLE 语句。DELETE语句可以通过where 对要删除的记录进行选择。而使用TRUNCATE TABLE 将删除表中的所有记录。因此,DELETE语句更灵活。
2、在功能上,truncate是清空一个表的内容,它相当于 delete from table_name。delete是DML(Data Manipulation Language 数据操纵语言)操作,truncate是DDL(Data Definition Languages 数据定义语言);因此,用delete删除整个表的数据时,会产生大量的roolback,占用很多的rollback segments,而truncate不会。
3、如果要删除表中的部分记录,只能使用DELETE语句。
4、delete from table1 where;
如果delete不加where 子句,那么它和truncate table是一样的,但他们有点不同,那就是delete可以返回被删除的记录数,而truncate table返回的是0。在内存中,用delete删除数据,表空间中其被删除数据的表占用的空间还在,便于以后得使用,另外它是“假象”的删除,相当于windows中用delete删除数据是把数据放到回收站中,还可以恢复,当然如果这个时候重新启动系统,它也就不能恢复了。
而truncate清除数据,内存中表空间中其被删除数据的表占用的空间会被立即释放,不能够恢复。
5、delete和 truncate table的最大区别是delete 可以通过where语句选择要删除的记录。但执行得速度不快。而且还可以返回被删除的记录数。而truncate table 无法删除指定的记录,而且不能返回被删除的记录,但它执行的非常快。
6、truncate 只能对 table,delete可以是 table,view。
7、truncate和delete只删除数据,而drop则删除整个表(结构和数据)。
8、truncate之后的自增字段从头开始计数了,而delete的扔保留原来的最大值。
9、速度,一般来说 drop>;truncate >;delete
10、安全性:小心使用drop和truncate,尤其是没有备份的时候,否则苦都来不及。
使用上,想删除部分数据行用delete,注意带上where子句;想删除表,当然用drop;想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关或者想触发trigger,还是用delete。