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语句有许多优点。
- SQL TRUNCATE TABLE语句使用较少的事务日志空间,因为它一次删除表中的所有行,而SQL DELETE语句一次删除一行,还为每个删除的行写入事务日志。
- 当删除一个大数据表中的所有行时,SQL TRUNCATE TABLE语句的执行速度比SQL DELETE语句快。
- SQL TRUNCATE TABLE语句使用表级锁,而SQL DELETE语句使用行级锁。
- 如果表有一个自动递增列,那么如果使用SQL TRUNCATE table,则该列的计数器将重置为在列定义中的初始值(通常为零)。
SQL TRUNCATE TABLE的局限
然而,SQL TRUNCATE TABLE语句也是有一些局限的:
SQL TRUNCATE TABLE语句不能在被外键约束引用的表中使用。
在某些rdbms数据库管理系统中,SQL TRUNCATE TABLE语句不能用于参与索引视图的表或在复制方案中使用的表。