🙏 感谢您的支持! 我们在七月份已经筹集了 $65 — 这足够我们工作到下个月。请帮助我们保持进度,进一步支持这个项目。 支持这个项目 →
SQL 代码已复制到剪贴板

课程 9.2: TRUNCATE 和 DROP TABLE 语句

在上一课中,我们学习了如何使用 CREATE TABLE 创建表。但在实际的数据库工作中,重要的不仅是创建结构,还要理解如何清空表或完全删除它们。为此,SQL 提供了 TRUNCATEDROP TABLE 语句。

这两者都属于数据定义语言(DDL),但它们解决不同的任务。TRUNCATE 快速删除表中的所有行,而 DROP TABLE 则连同其结构一起删除表本身。

TRUNCATE 的作用

TRUNCATE 语句从表中删除所有行,但表本身仍然存在。

运行 TRUNCATE 后:

  • 表结构被保留;
  • 列名、数据类型和约束保持不变;
  • 表变为空;
  • 在许多 DBMS 中,该操作比大规模的 DELETE 更快。

TRUNCATE 语法

TRUNCATE TABLE table_name;

TRUNCATE 示例

TRUNCATE TABLE logs;

之后,logs 表仍将存在于数据库中,但所有行将被删除。


DROP TABLE 的作用

DROP TABLE 语句完全删除一个表。

运行 DROP TABLE 后:

  • 所有表数据被删除;
  • 表结构被删除;
  • 表在数据库中不再存在;
  • 除非重新创建,否则在后续查询中无法引用。

DROP TABLE 语法

DROP TABLE table_name;

DROP TABLE 示例

DROP TABLE old_reports;

之后,old_reports 表将从数据库中完全删除。


TRUNCATEDROP TABLE 的区别

尽管这两条语句都删除数据,但它们之间有根本的区别。

1. 删除的内容

  • TRUNCATE 仅删除行。
  • DROP TABLE 删除行和表本身。

2. 表是否仍可使用

  • TRUNCATE 后,表仍然存在,可以再次插入新数据。
  • DROP TABLE 后,表消失,必须重新创建才能再次使用。

3. 使用时机

  • 当您需要快速清空表而保持其结构时,TRUNCATE 是合适的。
  • 当表完全不再需要时,DROP TABLE 是合适的。

TRUNCATEDELETE 的区别

初学者常常将 TRUNCATEDELETE 进行比较,因为这两个命令都可以从表中删除数据。

主要区别在于:

  • DELETE 可以与 WHERE 一起使用,仅删除部分行;
  • TRUNCATE 一次性删除表中的所有行;
  • DELETE 属于 DML,而 TRUNCATE 通常被视为 DDL;
  • 当必须清空整个表时,TRUNCATE 在许多 DBMS 中通常更快;
  • 与日志记录、回滚和身份计数器重置相关的行为取决于特定的 DBMS。

如果您只需要删除部分数据,DELETE 通常是正确的选择。如果您需要快速清空整个表但保留其结构,TRUNCATE 通常更方便。


注意事项

使用 TRUNCATEDROP TABLE 时,重要的是要记住一些规则:

  • 始终检查您是否只需要删除数据或整个表结构;
  • 如果表结构仍然需要,请勿使用 DROP TABLE
  • 如果您只需要删除部分行,请勿用 TRUNCATE 替代 DELETE
  • 请记住,在某些 DBMS 中,如果表被外键引用,则无法使用 TRUNCATE
  • 请注意,TRUNCATE 的行为和回滚支持取决于特定的 DBMS。

错误使用这些语句可能导致数据或表结构的丢失。


实际示例

想象一下,我们有一个名为 daily_import 的辅助表,每天将外部系统的中间数据加载到该表中。

如果该表定期使用,但在每次新加载之前必须完全清空,则 TRUNCATE 是合适的:

TRUNCATE TABLE daily_import;

之后,表结构保持不变,可以再次加载新数据。

如果该表仅为一次性任务创建,并且不再需要,则可以完全删除:

DROP TABLE daily_import;

在第一种情况下,我们为现有表的重用做准备。在第二种情况下,我们完全从数据库中删除一个不再需要的对象。


本课要点:

  • TRUNCATE 从表中删除所有行,但保留其结构。
  • DROP TABLE 删除数据和表本身。
  • TRUNCATEDELETE 解决类似的问题,但工作方式不同。
  • 在使用它们之前,重要的是要理解您是需要清空表还是完全删除它。
  • TRUNCATEDROP TABLE 的行为在不同的 DBMS 中可能略有不同。

在下一课中,我们将学习临时表,并了解它们在中间结果中何时方便使用。

尝试解决以下任务,以巩固您在本课中学到的内容。

  1. 删除表