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修改數據