比较:mysql中的truncate、delete与drop

国内新闻 浏览(898)

相同点:

1.truncate和delete没有where子句,drop将删除表中的数据。

2.drop,truncate是DDL语句(数据定义语言),执行后会自动提交。

不同点:

1.截断和删除只删除数据的结构而不删除表(定义)

drop语句删除表结构的约束(约束),触发器和索引;依赖于表的存储过程/函数将保留,但将变为无效。

2. delete语句是数据库操作语言(dml)。此操作将放在回滚段中,并且在提交事务之前不会生效。如果有相应的触发器,则在执行时将触发。

截断和删除是数据库定义语言(ddl)。该操作立即生效。原始数据未放置在回滚段中,无法回滚。该操作不会触发触发器。

3.删除语句不影响表占用的范围,高水位保持不变。

drop语句释放表占用的所有空间。

默认情况下,truncate语句会将空间释放到minextents范围,除非使用重用存储; truncate重置高水印(回到开头)。

4.速度,通常为:下降>截断>删除

5.安全性:小心drop和truncate,尤其是在没有备份的情况下。否则,哭得太晚了

在使用中,要删除一些数据行,注意带上where子句。回滚段应该足够大。

想要删除表格,当然要使用drop

我想保留表并删除所有数据。如果它与事务无关,请使用truncate。如果它与事务相关,或者如果要触发触发器,请使用delete。

件并重新导入/插入数据。

6.delete是DML语句,不会自动提交。 Drop/truncate是一个在执行后自动提交的DDL语句。

7. TRUNCATE TABLE在功能上与没有WHERE子句的DELETE语句相同:都删除表中的所有行。但是,TRUNCATE TABLE比DELETE更快,并且使用更少的系统和事务日志资源。 目。 TRUNCATE TABLE通过释放用于存储表数据的数据页来删除数据,并仅在事务日志中记录页面的释放。

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

9.对于FOREIGN KEY约束引用的表,不能使用TRUNCATE TABLE,而是使用不带WHERE子句的DELETE语句。由于TRUNCATE TABLE未记录在日志中,因此无法激活触发器。

10. TRUNCATE TABLE不能用于参与索引视图的表。

http://www.whgcjx.com/bds1rz2N3.html