SQL TRUNCATE TABLE:清空表

 
SQL TRUNCATE TABLE 语句用来删除表中的所有记录,也即清空表,它类似于不带 WHERE 子句的 DELETE FROM 语句。

TRUNCATE TABLE 和 DROP TABLE

DROP TABLE 用来删除表,包括删除该表的数据、结构、索引、触发器、约束等所有信息。一旦使用 DROP TABLE 删除了表,则该表的所有信息都将丢失,该表再也无法使用了。如果您希望存储一些数据,就只能重新创建该表。

TRUNCATE TABLE 仅仅删除表的所有记录,表的结构、索引、触发器、约束等将被保留,后续仍然可以使用该表。

TRUNCATE TABLE 和 DELETE FROM

不带 WHERE 子句的 DELETE FROM 语句同样可以达到清空表的效果,但是 TRUNCATE TABLE 使用的系统资源和日志资源更少,因此比 DELETE FROM 更加快速。

DELETE FROM 语句每删除一行,都会在事务日志中为所删除的行记录一项。TRUNCATE TABLE 通过释放表中数据所用的数据页来删除数据,只会在事务日志中记录页的释放。

此外,TRUNCATE TABLE 还能重置具有自动递增(AUTO_INCREMENT)属性的字段,而 DELETE FROM 却不具备该功能。

总结

  • 当您不再需要该表时,使用 DROP TABLE;
  • 当您仍要保留该表,只是想删除所有记录时,使用 TRUNCATE TABLE;
  • 当你要删除部分记录时,使用带有 WHERE 子句的 DELETE FROM。

语法

TRUNCATE TABLE 命令的基本语法如下:

TRUNCATE TABLE  table_name;

table_name 为表名。

示例

有包含如下记录的 CUSTOMERS 表:
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
使用 TRUNCATE TABLE 命令清空数据表:
SQL > TRUNCATE TABLE CUSTOMERS;
现在 CUSTOMERS 表已被清空,使用 SELECT 语句的输出结果如下:
SQL> SELECT * FROM CUSTOMERS;
Empty set (0.00 sec)