DROP、TRUNCATE 和 DELETE 之间的区别和最佳用途是啥?它们可以回滚吗? [复制]
Posted
技术标签:
【中文标题】DROP、TRUNCATE 和 DELETE 之间的区别和最佳用途是啥?它们可以回滚吗? [复制]【英文标题】:What are differences between, and best purposes of, DROP, TRUNCATE, and DELETE? Can they be rolled back? [duplicate]DROP、TRUNCATE 和 DELETE 之间的区别和最佳用途是什么?它们可以回滚吗? [复制] 【发布时间】:2013-09-07 12:45:58 【问题描述】:*Delete 是一种 DML(数据操作语言)。 Delete 命令从现有表中删除记录。*Delete
的语法是
sql> Delete from .
这会删除表格中的所有记录
sql> Delete from
Where **
这会删除一组特定的记录。
注意:Delete 不是 Autocommit 语句(实际上没有一个 DML 是自动提交的)
Drop 和 Truncate 都是 DDL(数据定义语言)。
删除 Delete or drops 表及其结构。它是自动提交语句。掉落物一旦发射就无法回滚。
语法:
sql>drop table
Truncate 是用于从表中删除所有记录的命令。但表的结构保持不变。也是自动提交语句。
语法;
sql>truncate table**
我们可以回滚截断吗?
【问题讨论】:
这个问题及其标题一团糟。请清理它们。 Oracle 提供了大量在线文档,包括所有产品的示例。我建议您查阅适用于您正在使用的 Oracle 版本的手册,阅读这些命令并尝试示例。通过这种方式,您将获得使用这些命令的宝贵经验,否则您将无法获得这些经验。祝你好运。 【参考方案1】:DELETE 处理使用WHERE
语句选择的行。它的使用是运行生产应用程序规则的一部分。例如,您可以删除一个多月前标记为“完成”的所有行。
DELETE 可以作为事务的一部分进行。也就是说,DELETE 操作可以提交或回滚。
TRUNCATE 快速删除表中的所有行,同时保持表定义。 (逐行删除可能需要一些时间,尤其是对于具有大量键的表。)对于诸如开始为每周生产为空的日志表之类的事情非常有用。它具有重置索引和释放未使用的磁盘存储的便利副作用。例如,我使用 TRUNCATE 清除了曾经包含数百万行的日志表的内容,以切换到仅包含一周行的操作规程。
DROP 快速删除所有行和表的定义。它最常用于为操作设置 DBMS 架构或将数据迁移到新服务器。
TRUNCATE 和 DROP 被视为数据定义语句。因此,它们不能成为事务的一部分,也不能回滚。
如果您发现自己在日常生产中使用了 TRUNCATE 或 DROP,您应该小心理解为什么要这样做。与 DELETE 相比,它们是钝器。
【讨论】:
我非常喜欢你的回答,因为你已经告诉了每个命令的定义和我能想到使用它们的实际位置。但我希望您能提供更多关于DROP
命令实际应用领域的文章。
@Babai:- 看看这个:- docs.oracle.com/cd/B19306_01/server.102/b14200/… 这肯定会填满你正在寻找的其余部分!!!!
@RahulTripathi 你能帮我在 Ubuntu OS 中安装 Oracle11g 吗?我在 Windows 中使用它,但不知道我应该如何在 Ubuntu 中进行操作。
@Babai:- 虽然我很乐意将此视为一个单独的问题。但是,如果有帮助,您可以检查一下:- forums.oracle.com/thread/2461988?start=0&tstart=0【参考方案2】:
DELETE
命令用于从表中删除行。 WHERE
子句只能用于删除某些行。
TRUNCATE
删除表中的所有行。该操作无法回滚,也不会触发任何触发器。
DROP
命令从数据库中删除一个表。所有表的行、索引和权限也将被删除。不会触发任何 DML 触发器。
签出this,
【讨论】:
【参考方案3】:“Drop”完全删除表格。它不再存在。
“截断”是一种从表中删除所有行的快速方法。
“删除”删除符合条件的行。
另请参阅:What's the difference between TRUNCATE and DELETE in SQL
【讨论】:
以上是关于DROP、TRUNCATE 和 DELETE 之间的区别和最佳用途是啥?它们可以回滚吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
oracle中delete,truncate 和 drop的区别