42. SQL--truncate table:清空表
1. 前言
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。
2. 语法
truncate table 命令的基本语法如下:
truncate table table_name;
table_name 为表名。
3. 示例
有包含如下记录的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)