SQL Server截断表

在本教程中,将学习如何使用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语句更快,更有效地删除表中的所有行。


上一篇: SQL Server数据定义 下一篇: SQL Server修改数据