SQL TRUNCATE TABLE

摘要:在本教程中,您將學習如何使用 SQL TRUNCATE TABLE 語句來高效、快速地刪除表中的所有資料。

SQL TRUNCATE TABLE 語句簡介 #

要刪除表中的所有資料,您可以使用不帶 WHERE 子句的 DELETE 語句。

DELETE FROM table_name;

然而,對於包含大量資料的表,DELETE 語句在刪除所有行時速度較慢且效率不高。原因是資料庫系統可能需要為每一行單獨獲取鎖並寫入日誌。

為了減少鎖定和日誌記錄的開銷,您可以使用 TRUNCATE TABLE 語句。TRUNCATE TABLE 語句可以非常快速地刪除表中的所有資料。

以下是 TRUNCATE TABLE 語句的語法:

TRUNCATE TABLE table_name;Code language: SQL (Structured Query Language) (sql)

在此語法中,您在 TRUNCATE TABLE 關鍵字後指定要刪除資料的 table_name(表名)。

一些資料庫系統(如 MySQL 和 PostgreSQL)允許您省略 TABLE 關鍵字,因此 TRUNCATE TABLE 語句可以簡化如下:

TRUNCATE table_name;Code language: SQL (Structured Query Language) (sql)

當您發出 TRUNCATE TABLE 語句時,資料庫系統透過釋放表分配的資料頁來刪除表中的所有行。透過這樣做,資料庫系統可以減少日誌記錄和鎖定的資源消耗。

要一次性截斷多個表,您可以在 TRUNCATE TABLE 子句中指定一個用逗號分隔的表名列表:

TRUNCATE TABLE table_name1, table_name2, ...;Code language: SQL (Structured Query Language) (sql)

並非所有資料庫系統都支援這種形式的 TRUNCATE TABLE 語句。如果您使用的系統不支援,則必須發出多個 TRUNCATE TABLE 語句來截斷多個表。

SQL TRUNCATE TABLE 語句示例 #

首先,建立一個名為 items 的新表:

CREATE TABLE items (
  id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY
);Code language: SQL (Structured Query Language) (sql)

試一試

其次,根據需要多次執行以下 INSERT 語句,以向 items 表中插入資料:

INSERT INTO
  items (id)
VALUES
  (DEFAULT);Code language: SQL (Structured Query Language) (sql)

試一試

請注意,如果您使用的資料庫系統支援使用者自定義函式或儲存過程,您可以將此語句放入迴圈中。

例如,以下 PostgreSQL 中的過程會將由 n 引數指定的行數載入到 items 表中。

CREATE PROCEDURE load_data (n INT) AS $$
BEGIN
  FOR i IN 1..n LOOP
    INSERT INTO items(id) VALUES(DEFAULT);
  END LOOP;
END;  
$$ LANGUAGE plpgsqlCode language: SQL (Structured Query Language) (sql)

試一試

以下語句呼叫 load_data 過程,向 items 表中插入 10,000 行資料。

CALL load_data(10000);Code language: SQL (Structured Query Language) (sql)

試一試

第三,使用 TRUNCATE TABLE 語句截斷 items 表中的資料:

TRUNCATE TABLE items;Code language: SQL (Structured Query Language) (sql)

試一試

SQL TRUNCATE TABLE 與 DELETE 語句的對比 #

下表比較了 SQL DELETETRUNCATE TABLE 語句:

方面DELETETRUNCATE TABLE
目的根據 WHERE 子句從表中刪除一行或多行。如果沒有 WHERE 子句,DELETE 語句也會刪除表中的所有行。刪除表中的所有行。
條件刪除允許在 WHERE 子句中指定條件以刪除特定行。不支援條件。
事務支援記錄刪除操作,並支援作為事務一部分的回滾。提供非常少的日誌記錄。一些資料庫系統也支援在事務中回滾。
效能較慢較快
觸發器觸發 DELETE 觸發器。不觸發 DELETE 觸發器。一些資料庫系統支援 TRUNCATE 觸發器。
標識列重置不重置標識列(自增列)的值。將標識列的值重置為其種子值。
外部索引鍵約束遵循外部索引鍵約束。不能截斷被外部索引鍵引用的表。一些資料庫系統支援 CASCADE 選項,在截斷表之前刪除外部索引鍵約束。
用途當您想根據條件刪除特定行或需要使用 DELETE 觸發器時。當您需要快速刪除表中的所有資料時。

摘要 #

  • 使用 TRUNCATE TABLE 語句刪除表中的所有行。

測驗 #

資料庫 #

本教程是否有幫助?
© .