DROP,TRUNCATE和DELETE之间的区别和最佳目的是什么?他们可以回滚吗?

ani*_*mar 1 sql database oracle plsql

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

sql> Delete from .
Run Code Online (Sandbox Code Playgroud)

这将从TAble中删除所有记录

sql> Delete from
      Where  ** 
Run Code Online (Sandbox Code Playgroud)

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

注意:删除不是Autocommit语句(事实上,DML都不是自动提交)

Drop和Truncate都是DDL(数据定义语言).

使用它的结构删除{删除或删除}表.这是自动声明.Drops一旦被解雇,就无法回滚.

句法:

sql>drop table
Run Code Online (Sandbox Code Playgroud)

Truncate是用于从表中删除所有记录的命令.但是表的结构保持不变.它也是一个自动提交声明.

句法;

sql>truncate table**
Run Code Online (Sandbox Code Playgroud)

我们可以回滚截断吗?

O. *_*nes 12

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

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

TRUNCATE在保持表定义的同时快速删除表中的所有行.(逐行DELETE可能需要一些时间,特别是对于包含大量键的表.)它对于诸如每周生产空白的日志表之类的东西都很方便.它具有重置索引和释放未使用的磁盘存储的便利副作用.我曾使用TRUNCATE消除过去包含数百万行的日志表的内容,以切换到一个操作规程,例如,它只包含一周的行.

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

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

如果您发现自己在日常生产中使用TRUNCATE或DROP,那么您应该小心理解为什么要这样做.与DELETE相比,它们是钝器.