在本教程中,将学习如何使用SQL Server TRUNCATE TABLE
语句更快,更有效地从表中删除所有行。
SQL Server TRUNCATE TABLE语句简介
有时,希望从表中删除所有行。 在这种情况下,通常使用不带WHERE
子句的DELETE语句。
以下示例创建一个名为customer_groups
的新表,并向此表中插入一些行:
CREATE TABLE sales.customer_groups (
group_id INT PRIMARY KEY IDENTITY,
group_name VARCHAR (50) NOT NULL
);
INSERT INTO sales.customer_groups (group_name)
VALUES
('公司内部'),
('第三方'),
('一次购买');
要删除customer_groups
表中的所有行,请使用DELETE
语句,如下所示:
DELETE FROM sales.customer_groups;
除使用DELETE FROM
语句外,还可以使用TRUNCATE TABLE
语句删除表中的所有行。
以下是TRUNCATE TABLE
语句的语法:
TRUNCATE TABLE [database_name.][schema_name.]table_name;
在此语法中,首先,table_name
指定要从中删除所有行的表的名称。 其次,database_name
-数据库名称是创建表的数据库的名称。 数据库名称是可选的。 如果未指定数据名称,该语句将删除当前连接的数据库中的表。
以下语句首先将一些行插入customer_groups
表,然后使用TRUNCATE TABLE
语句从中删除所有行:
INSERT INTO sales.customer_groups (group_name)
VALUES
('公司内部'),
('第三方'),
('一次购买');
TRUNCATE TABLE sales.customer_groups;
TRUNCATE TABLE
类似于没有WHERE
子句的DELETE
语句。 但是,TRUNCATE
语句执行得更快,并且使用的系统和事务日志资源更少。
TRUNCATE TABLE与DELETE比较
与DELETE
语句相比,TRUNCATE TABLE
具有以下优点:
1. 使用较少的事务日志
DELETE
语句一次删除一行,并在事务日志中为每个删除的行插入一个条目。 另一方面,TRUNCATE TABLE
语句通过释放用于存储表数据的数据页来删除数据,并仅在事务日志中插入页面解除分配。
2. 使用更少的锁
使用行锁执行DELETE
语句时,表中的每一行都被锁定以便删除。 TRUNCATE TABLE
锁定表和页,而不是每一行。
3. 标识重置
如果要截断的表具有标识列,则当使用TRUNCATE TABLE
语句删除数据后,具有标识列的计数器将重置为开始的值(一般是:1
)。
在本教程中,学习了如何使用TRUNCATE TABLE
语句更快,更有效地删除表中的所有行。