drop,delete与truncate的差别转载

原创
小哥 3年前 (2022-10-28) 阅读数 17 #大杂烩

drop 直接删除该表;

truncate 删除表中的数据,然后从增长的数据中插入数据。id又重新从1开始;

delete 删除表中的数据,您可以稍后再添加。where字句。

(1)DELETE语句执行删除操作的过程是每次从表中删除一行,同时将该行的删除作为事务记录保存在日志中,用于回滚操作。TRUNCATE TABLE 然后一次删除表中的所有数据,不要在日志中记录单独的删除操作。删除行无法恢复。并且在删除过程中不会激活与该表相关的删除触发器。执行速度快。

(2) 表和索引空间。当桌子是TRUNCATE 在此之后,该表和索引占用的空间将恢复到其初始大小,并且DELETE该操作不会减少表或索引占用的空间。drop该语句释放表占用的所有空间。

(3) 总体而言,drop > truncate > delete

(4) 适用范围。TRUNCATE 只能对TABLE;DELETE可以是table和view

(5) TRUNCATE 和DELETE仅删除数据,并且DROP整个表格(结构和数据)将被删除。

(6) truncate与不带where的delete :仅删除数据,并且不删除表的结构(定义)drop该语句删除表的结构所依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/该功能将被保留,但其状态将更改:invalid。

(7) delete语句为DML(data maintain Language),这项操作将放在 rollback segment中,事务在提交后才生效。如果有对应的 tigger,将在执行时触发。

(8) truncate、drop是DLL(data define language),操作立即生效,不会放入原始数据 rollback segment不能回滚

(9) 在没有备份的情况下,请谨慎使用。 drop 与 truncate。使用删除某些数据行delete并注意组合where以限制影响的范围。回滚段应该足够大。要删除表格,请执行以下操作drop;如果您想保留该表并删除表中的数据,如果它与事务无关,则使用它。truncate是可以实现的。如果是与交易有关,或者是老师想要触发。trigger,还是用delete。

(10) Truncate table 表名 速度快,而且效率高,因为:truncate table 在功能上和 WHERE 子句的 DELETE 语句相同:两者都删除表中的所有行。但 TRUNCATE TABLE 比 DELETE 速度快,使用的系统和事务日志资源很少。DELETE 语句一次删除一行,并为事务日志中删除的每一行记录一项。TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且只在事务日志中记录页释放。

(11) TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。用于新行标识的计数值被重置为该列的种子。如果要保留身份计数值,请改用。 DELETE。如果要删除表定义及其数据,请使用它。 DROP TABLE 语句。

(12) 对于由 FOREIGN KEY 无法使用约束引用的表。 TRUNCATE TABLE,但应使用 WHERE 子句的 DELETE 声明。到期 TRUNCATE TABLE 它没有记录在日志中,因此无法激活触发器。

作者:薄卫峰51Code教研组
链接:https://www.jianshu.com/p/9d6c6e5d676f
资料来源:简讯
版权归作者所有。请联系作者以获得商业转载的授权,并注明非商业转载的来源。

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除