删除与截断

Drop和Truncate是数据库管理系统中使用的两条SQL(结构化查询语言)语句,我们希望从数据库中删除数据记录。 Drop和Truncate语句均删除表和相关SQL语句中的全部数据。 在这种情况下,删除操作无效,因为它使用的存储空间比Drop和Truncate多。

万一,如果我们要丢弃数据库中的表及其所有数据,SQL允许我们使用Drop语句轻松地执行此操作。 删除命令是DDL(数据定义语言)命令,可用于销毁现有数据库,表,索引或视图。 它从数据库中删除表中的全部信息以及表结构。 同样,我们可能希望简单地删除表中的所有数据,但不删除表,并且在这种情况下可以在SQL中使用Truncate语句。 截断也是DDL命令,它消除了表中的所有行,但保留表定义相同以备将来使用。

放下命令

如前所述,Drop命令删除在该特定表上创建的表定义及其所有数据,完整性约束,索引,触发器和访问特权。 因此,它会从数据库中完全删除现有对象,并且在执行命令后与其他表的关系也将不再有效。 它还会从数据字典中删除有关表的所有信息。 以下是在表上使用Drop语句的典型语法。

滴台

在上面的Drop命令示例中,我们只需要替换要从数据库中删除的表名即可。

重要的是要指出,Drop语句不能用于删除已被外键约束引用的表。 在这种情况下,必须先删除引用外键约束或该特定表。 另外,Drop语句不能应用于数据库中的系统表。

由于Drop命令是自动提交语句,因此一旦触发操作便无法回滚,也不会触发任何触发器。 删除表时,对该表的所有引用将无效,因此,如果我们要再次使用该表,则必须使用所有完整性约束和访问权限来重新创建该表。 与其他表的所有关系也必须重新定位。

截断命令

Truncate命令是DDL命令,它在没有任何用户指定条件的情况下删除表中的所有行,并释放表使用的空间,但是表结构及其列,索引和约束保持不变。 截断通过重新分配用于存储表数据的数据页面来从表中消除数据,并且只有这些页面取消分配保留在事务日志中。 因此,与其他相关的SQL命令(如Delete)相比,它使用较少的事务日志资源和系统资源。 因此,Truncate的声明要比其他人快一些。 以下是Truncate命令的典型语法。

截断表

我们应该使用上述语法替换要从其中删除所有数据的表名。

不能在已被外键约束引用的表上使用截断。 它在操作之前自动使用提交,然后在操作之后自动使用另一个提交,因此不可能回滚事务,并且不会触发任何触发器。 如果要重用表,则只需要访问数据库中现有的表定义。

Drop和Truncate有什么区别?

Drop和Truncate命令都是DDL命令,并且都是自动提交语句,因此使用这些命令执行的事务不能回滚。

Drop和Truncate之间的主要区别在于,Drop命令不仅会删除表中的所有数据,而且还会从具有所有引用的数据库中永久删除表结构,而Truncate命令仅会删除表中的所有行,并保留表结构及其引用。

如果删除了一个表,则与其他表的关系将不再有效,并且完整性约束和访问特权也将被删除。 因此,如果需要重用表,则必须使用关系,完整性约束以及访问权限来重新构造它。 但是,如果表被截断,则表结构及其约束将保留以备将来使用,因此,不需要任何上述重新创建来重新使用。

当应用这些命令时,我们必须谨慎使用它们。 另外,我们应该对这些命令的性质,它们如何工作以及使用它们之前进行一些仔细的计划,以防止丢失基本要领有更好的了解。 最后,这两个命令都可用于快速轻松地清理数据库,从而消耗更少的资源。