SQL TRUNCATE TABLE 语句

在本教程中,你将学习如何使用 SQL 快速删除表中的所有行。

删除表数据

TRUNCATE TABLE 从表中比 DELETE 更快地删除所有行。逻辑上, TRUNCATE TABLE 类似于没有 WHERE 子句的 DELETE 语句。

TRUNCATE TABLE 语句从表中删除所有行,但表结构及其列,约束,索引等保持不变。除了数据之外还要删除表定义,可以使用 DROP TABLE 语句。

语法

基本语法 TRUNCATE TABLE 如下:

TRUNCATE TABLE table_name ; 

让我们对数据库表执行 truncate 操作。

考虑我们在数据库中有一个雇员表,其中包含以下记录:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
+--------+--------------+------------+--------+---------+

以下命令从 employees 表中删除所有行 :

TRUNCATE TABLE employees;

现在,执行上述 SQL 语句后,如果尝试从 employees 表中选择记录,则会得到一个空结果集。

TRUNCATE TABLE vs DELETE

虽然 DELETETRUNCATE TABLE 似乎具有相同的效果,但它们的确有不同的作用。以下是这两个语句之间的一些主要差异:

  • TRUNCATE TABLE 语句删除并重新创建表,使任何自动增量值重置为其起始值,通常为 1。
  • DELETE 允许你根据可选 WHERE 子句筛选要删除的行,而 TRUNCATE TABLE 不支持 WHERE 子句,它只能删除所有行。
  • TRUNCATE TABLE 更快,比 DELETE 使用更少的系统资源,因为 DELETE 扫描表以生成受影响的行数然后逐个删除行并在数据库日志中记录每个已删除行的条目,而 TRUNCATE TABLE 只删除所有行而不提供任何其他信息。

提示: 使用 TRUNCATE TABLE ,如果你只是想删除所有的行,并重新创建整个表。使用 DELETE ,如果你想删除基于特定条件的有限数量的行,或者你不想要重置自动递增值。