在本教學中,將學習如何使用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
語句更快,更有效地刪除表中的所有行。