delete和truncate都是对表的数据进行操作,delete是对表中的一条或多条数据进行操作,而truncate是对表中的所有数据记录进行操作,一般我们用delete叫做删除表,用truncate叫做截断表。
1、delete
不能回滚、空间不能回收、工作效率低
2、truncate
能回滚、空间能回收、工作效率高
回滚:
意思像是“你做了一件后悔的事情,可以回到犯错以前”,在oracle中数据是放到undo空间中,delete是DDL语句,truncate是DML语句,而DDL能访问undo空间,truncate不能访问undo空间,所以delete能回滚。
空间:
oracle每次添加记录的时候都会为记录分配空间,使用delete删除,数据会被删除,但是空间还在占用着没有被回收。truncate就不一样,他是直接截取删除整表的记录从而把空间释放,这样内存占用量就少。在公司中往往不用删除命令,尽量少用至不用,因为在公司中数据是很重要的,很可能一不小心就把重要的文件删除,这样会对公司造成巨大的影响,一般公司采用将没有用的数据标记,不会选择删除,利用内存空间换取数据的安全性。
效率:
delete删除的时候是一条一条的语句删除,truncate是直接截取并删除,好比让你扔掉两本书,你是一页一页的撕掉扔进垃圾桶,或者是将两本书直接扔进垃圾桶;