SQL TRUNCATE TABLE 清空表

时间:2018-11-15 18:02:02  来源:igfitidea点击:

在本教程中,我们将学习如何使用SQL TRUNCATE TABLE语句有效地删除表中的所有行。

要删除表中的所有行,可以使用SQL delete语句。但是,对于具有大量行的表,DELETE语句效率不高。幸运的是,SQL提供了TRUNCATE TABLE语句,使您能够更有效地删除表中的所有行。

TRUNCATE TABLE语句的语法如下:

TRUNCATE TABLE table_name

在TRUNCATE TABLE关键字之后是要删除所有数据的表名。与DELETE语句不同,TRUNCATE TABLE语句没有WHERE子句。

SQL清空表示例

让我们练习一下如何使用TRUNCATE TABLE语句,以便更好地理解它。

首先,我们创建一个名为tmp的表,该表有两列id和name:

CREATE  TABLE tmp (
        id INT NOT NULL AUTO_INCREMENT ,
        name VARCHAR(45) NULL ,
        PRIMARY KEY (id) );

然后,我们使用SQL insert语句插入一些测试数据:

INSERT INTO tmp(name) 
VALUES('MySQL');
INSERT INTO tmp(name)
VALUES('PostgreSQL');
INSERT INTO tmp(name)
VALUES('theITroad 之路教程');
INSERT INTO tmp(name)
VALUES('Microsoft SQL Server')

接着,我们查询数据以检查insert操作是否成功。

SELECT * FROM tmp;

最后,我们可以使用SQL TRUNCATE TABLE语句删除tmp表中的所有行。

TRUNCATE TABLE tmp

如果这时我们再次查询tmp表,将看不到任何数据,因为tmp表现在是空的。

SQL TRUNCATE TABLE 和 DELETE的比较

在一些数据库管理系统(如Microsoft SQL Server、Oracle和MySQL)中,使用SQL TRUNCATE TABLE语句比使用DELETE语句有许多优点。

  1. SQL TRUNCATE TABLE语句使用较少的事务日志空间,因为它一次删除表中的所有行,而SQL DELETE语句一次删除一行,还为每个删除的行写入事务日志。
  2. 当删除一个大数据表中的所有行时,SQL TRUNCATE TABLE语句的执行速度比SQL DELETE语句快。
  3. SQL TRUNCATE TABLE语句使用表级锁,而SQL DELETE语句使用行级锁。
  4. 如果表有一个自动递增列,那么如果使用SQL TRUNCATE table,则该列的计数器将重置为在列定义中的初始值(通常为零)。

SQL TRUNCATE TABLE的局限

然而,SQL TRUNCATE TABLE语句也是有一些局限的:

SQL TRUNCATE TABLE语句不能在被外键约束引用的表中使用。
在某些rdbms数据库管理系统中,SQL TRUNCATE TABLE语句不能用于参与索引视图的表或在复制方案中使用的表。