SQL - 截斷表



SQL 提供命令來完全截斷表,一次性完成,而不是逐條刪除表記錄,這將是一個非常耗時且繁瑣的過程。

SQL TRUNCATE TABLE 語句

SQL 的 TRUNCATE TABLE 命令用於清空表。此命令是 DROP TABLE 和 CREATE TABLE 語句的序列,需要 DROP 許可權。

您還可以使用 DROP TABLE 命令來 刪除表,但它會從資料庫中刪除完整的表結構,如果您希望再次儲存一些資料,則需要重新建立此表。

語法

TRUNCATE TABLE 命令的基本語法如下所示。

TRUNCATE TABLE table_name;

示例

首先,讓我們建立一個名為 CUSTOMERS 的表,該表可以儲存客戶的個人詳細資訊,包括他們的姓名、年齡、地址和薪水等,如下所示:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);

現在使用 INSERT 語句將值插入此表,如下所示:

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

表將建立如下:

ID 姓名 年齡 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

以下 SQL TRUNCATE TABLE CUSTOMER 語句將刪除 CUSTOMERS 表的所有記錄:

TRUNCATE TABLE CUSTOMERS;

驗證

現在,CUSTOMERS 表已被截斷,SELECT 語句的輸出將如以下程式碼塊所示:

SELECT * FROM CUSTOMERS;

輸出如下:

Empty set (0.00 sec)

TRUNCATE vs DELETE

儘管 TRUNCATE 和 DELETE 命令在邏輯上工作方式相似,但它們之間存在一些主要差異。它們在下面的表格中詳細說明。

DELETE TRUNCATE

SQL 中的 DELETE 命令 根據 WHERE 子句中指定的條件刪除表中的一行或多行。

SQL 的 TRUNCATE 命令用於刪除表中的所有行,無論是否滿足任何條件。

它是 DML(資料操縱語言)命令。

它是 DDL(資料定義語言)命令。

在對 DELETE 命令進行更改後,需要手動提交才能提交修改。

使用 TRUNCATE 命令時,對錶的修改會自動提交。

它一次刪除一行,並對每次刪除應用相同的標準。

它一次刪除所有資訊。

WHERE 子句在這種情況下充當條件。

WHERE 子句不可用。

刪除後所有行都被鎖定。

TRUNCATE 使用表鎖,鎖定頁面以防止刪除。

它在日誌檔案中記錄每個事務。

僅記錄儲存資料的頁面的釋放。

與 TRUNCATE 命令相比,它消耗更多的事務空間。

它佔用的事務空間相對較少。

如果存在標識列,則表標識不會重置為表建立時的值。

它將表標識返回到作為種子給定的值。

它需要刪除授權。

它需要表更改許可權。

對於大型資料庫,它要慢得多。

它快得多。

TRUNCATE vs DROP

與重置表結構的 TRUNCATE 不同,DROP 命令 完全釋放記憶體中的表空間。它們都是資料定義語言 (DDL) 操作,因為它們與資料庫物件的定義互動;這允許資料庫在執行這些命令後自動提交,並且沒有回滾的機會。

但是,這兩個命令之間仍然存在一些差異,這些差異已在以下表格中總結:

DROP TRUNCATE

SQL 中的 DROP 命令從資料庫中刪除整個表,包括其定義、索引、約束、資料等。

TRUNCATE 命令用於刪除表中的所有行,無論是否滿足任何條件,並重置表定義。

它是 DDL(資料定義語言)命令。

它也是 DDL(資料定義語言)命令。

表空間完全從記憶體中釋放。

表仍然存在於記憶體中。

所有完整性約束都被刪除。

完整性約束仍然存在於表中。

分別需要表架構和表的 ALTER 和 CONTROL 許可權才能執行此命令。

只需要 ALTER 許可權即可截斷表。

DROP 命令比 TRUNCATE 慢得多,但比 DELETE 快。

TRUNCATE 命令比 DROP 和 DELETE 命令都快。

廣告