sql - DROP、TRUNCATE 和 DELETE 之间的区别和最佳用途是什么?它们可以回滚吗?

标签 sql database oracle plsql

<分区>

*Delete 是一种 DML(数据操作语言)。 Delete 命令从现有表中删除记录。*Delete 的语法是

sql> Delete from .

这会删除表中的所有记录

sql> Delete from
      Where  ** 

这会删除一组特定的记录。

注意:Delete 不是 Autocommit Statement(实际上没有一个 DML 是自动提交的)

Drop和Truncate都是DDL(Data Definition Language)

删除 {删除或删除} 表及其结构。它是自动提交语句。掉落物一旦发射就无法回滚。

语法:

sql>drop table

Truncate 是用来删除表中所有记录的命令。但表的结构保持不变。它也是一个自动提交语句。

语法;

sql>truncate table**

我们可以回滚截断吗?

最佳答案

DELETE 处理使用 WHERE 语句选择的行。它的使用是运行生产应用程序的一部分。例如,您可以删除一个多月前标记为“完成”的所有行。

DELETE 可以作为事务的一部分完成。也就是说,DELETE 操作可以提交或回滚。

TRUNCATE 快速删除表中的所有行,同时保持表定义。 (逐行 DELETE 可能需要时间,尤其是对于具有大量键的表。)对于每周生产开始时为空的日志表之类的事情,它会派上用场。它具有重置索引和释放未使用的磁盘存储的便利副作用。例如,我使用 TRUNCATE 清除了过去包含数百万行的日志表的内容,以切换到仅包含一周的行的操作规程。

DROP 快速删除所有行和表的定义。它最常用于为操作设置 DBMS 架构或将数据迁移到新服务器。

TRUNCATE 和 DROP 被认为是数据定义语句。因此它们不能成为事务的一部分,也不能回滚。

如果您发现自己在日常生产中使用了 TRUNCATE 或 DROP,您应该仔细了解您这样做的原因。与 DELETE 相比,它们是钝器。

关于sql - DROP、TRUNCATE 和 DELETE 之间的区别和最佳用途是什么?它们可以回滚吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18673450/

相关文章:

部分重叠数据的Sql Join

mysql - 访问数据MySQL。卡住构建

sql - 我的 mysql 索引没有任何作用

database - Codeigniter:如何使用多个数据库行跟踪事件?

sql - 如何优化此全文搜索查询? (tsvector)(150 万行)

C# MongoDB bulk Upsert - 批量写入操作导致一个或多个错误

php - 数组未从数据库输入数据

oracle - 如何从 Oracle/PLSQL 中的部分创建日期时间?

php - ORA-12154 PHP OCI8 悲痛

c# - 甲骨文和事件目录 : A love/hate relationship