sql中删除、删除和截断的异同的详细解释
第一:同一点:截断和删除没有WHERE子句,而删除则全部删除表中的数据。
第二点:不同点:
1。截断和删除只删除不删除表(定义)的数据结构。
下拉语句将删除表的约束、触发器和索引,并且依赖于表的存储过程/函数将被保留,但它将成为无效状态。
2。DELETE语句的数据库操作语言(DML)。此操作将回滚段,并将交易提交后生效。如果有相应的触发器执行,它将被触发。
截形,下降数据库定义语言(DDL),操作立即生效,原始数据不放在回滚段,不能回滚的操作不会触发。
的3.delete声明不会影响由表占用的程度,和水位线(高水印)保持原来的位置。
显然,下拉语句释放了表所占用的所有空间。当TRUNCATE语句是默认的,空间被释放,minextents程度,除非重用存储使用;截断将重置高水线(重新开始)。
4。速度:一般来说:删除>截断>删除
5。安全性:小心地使用下拉和截断,特别是在没有备份的情况下。否则,哭得太迟了。
6。使用方法:要删除部分数据线并删除,注意WHERE子句。回滚部分足够大。
如果要删除表,当然要使用下拉。
如果您希望保留表并删除所有数据,如果与事务无关,则可以使用截断;如果与事务有关,或者您想要触发触发器,或使用删除。
如果是在桌子里面的片段,你可以使用truncate跟上重用存储和重新导入/插入数据。
这篇文章很短,我不知道你是否区分了删除、删除和截断。
让我们与你分享一些细节。
(1)执行删除DELETE语句删除一行从表在同一时间的过程,和删除行的操作日志中的交易记录保存回滚operation.truncate表中删除所有的数据在一个时间表,不保持一个单独的删除操作记录存储在日志中,并删除行不恢复,删除触发器不会被删除的过程中激活,执行速度快。
(2)表和索引的空间。当表被截断时,表和索引占用的空间将恢复到初始大小,而删除操作不会减少表或索引所占用的空间。
(3)一般来说,删除>截断>删除
(4)对application.truncate范围只能表;删除可表和视图
(5)截断和删除只删除数据,而删除删除整个表(结构和数据)。
(6)截断和不删除:删除数据,删除表结构(定义)结构,下拉语句将从列表中被相关约束(约束)、触发器(触发器)索引(索引)删除;依赖存储过程/表函数将被保留,但是状态更改:无效。
(7)删除语句DML(数据维护语言),它将回滚段只提交后交易生效。如果有相应的Tigger,执行时将引发。
(8)截断和删除是DLL(数据定义语言),操作立即有效,原始数据不放置在回滚段中,不能回滚。
(9)在备份的情况下,压降和截断使用非常谨慎。删除数据行的一部分,使用删除,注意结合的影响。回滚段应足够大,以删除删除表;如果你想保持表和删除表中的数据,如果交易不相关的交易,它可以实现截形。如果有相关的交易,或老师想扣动扳机,或使用删除。
(10)截断表表名由于:
TRUNCATETABLE功能为删除语句没有WHERE子句一样:两全部删除表中的所有行,但表比删除和使用较少的系统和事务日志资源。DELETE语句删除行的每一次记录一项对于每一行,是在交易log.truncate表中删除删除数据通过释放用于存储表数据的数据页,并记录该页面只有在事务日志中的释放。
(11)TRUNCATE TABLE删除表中的所有行,但表结构和其列,约束,索引,等等都是一样的。用于新的线路标识的数值重置为该列的种子。如果你想保留的标识符的值,如果你想使用删除。删除表的定义和数据,使用DROP TABLE语句。
(12)对于外键约束引用的表,不能使用截断表,也不应使用没有WHERE子句的删除语句。因为截断表没有记录在日志中,所以不能激活触发器。
以上是本文的全部内容,希望能对大家有所帮助。