在本教程中,您将学习如何使用SQL快速删除表中的所有行。
TRUNCATE TABLE语句比DELET删除表中的所有行更快。从逻辑上讲,TRUNCATE TABLE它类似于DELETE没有WHERE子句的语句。
TRUNCATE TABLE语句从表中删除所有行,但表结构及其列,约束,索引等保持不变。要删除表及其数据,可以使用该DROP TABLE语句,但是需谨慎操作。
TRUNCATE TABLE的基本语法:
TRUNCATE TABLE table_name;
让我们对数据库表执行清空操作。
考虑我们在数据库中有一个employee表,其中包含以下记录:
+--------+--------------+------------+--------+---------+ | 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语句之后,如果尝试从employee表中选择记录,则将获得一个空结果集。
尽管DELETE和TRUNCATE TABLE似乎具有相同的效果,但是它们的工作方式不同。这是这两个语句之间的一些主要区别:
TRUNCATE TABLE语句删除并重新创建表,并使任何自动增量值都重置为其初始值(通常为1)。
DELETE可让您根据可选WHERE子句过滤要删除的行,TRUNCATE TABLE而不支持WHERE子句则仅删除所有行。
TRUNCATE TABLE与DELETE相比,它更快并且使用的系统资源更少,因为DELETE扫描表以生成受影响的行数,然后逐行删除行,并为每个删除的行在数据库日志中记录一个条目,而TRUNCATE TABLE只删除所有行而不提供任何其他信息。
提示:如果你只是想删除所有的行,并重新创建整个表,使用TRUNCATE TABLE。如果你想删除基于特定条件的行的数量有限,或者您不想要重置自动递增值,则使用DELETE。