SQL TRUNCATE TABLE 語句

在本教程中,你將學習如何使用 SQL 快速刪除表中的所有行。

刪除表資料

TRUNCATE TABLE 從表中比 DELETE 更快地刪除所有行。邏輯上, TRUNCATE TABLE 類似於沒有 WHERE 子句的 DELETE 語句。

TRUNCATE TABLE 語句從表中刪除所有行,但表結構及其列,約束,索引等保持不變。除了資料之外還要刪除表定義,可以使用 DROP TABLE 語句。

語法

基本語法 TRUNCATE TABLE 如下:

TRUNCATE TABLE table_name ; 

讓我們對資料庫表執行 truncate 操作。

考慮我們在資料庫中有一個僱員表,其中包含以下記錄:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
+--------+--------------+------------+--------+---------+

以下命令從 employees 表中刪除所有行 :

TRUNCATE TABLE employees;

現在,執行上述 SQL 語句後,如果嘗試從 employees 表中選擇記錄,則會得到一個空結果集。

TRUNCATE TABLE vs DELETE

雖然 DELETETRUNCATE TABLE 似乎具有相同的效果,但它們的確有不同的作用。以下是這兩個語句之間的一些主要差異:

  • TRUNCATE TABLE 語句刪除並重新建立表,使任何自動增量值重置為其起始值,通常為 1。
  • DELETE 允許你根據可選 WHERE 子句篩選要刪除的行,而 TRUNCATE TABLE 不支援 WHERE 子句,它只能刪除所有行。
  • TRUNCATE TABLE 更快,比 DELETE 使用更少的系統資源,因為 DELETE 掃描表以生成受影響的行數然後逐個刪除行並在資料庫日誌中記錄每個已刪除行的條目,而 TRUNCATE TABLE 只刪除所有行而不提供任何其他資訊。

提示: 使用 TRUNCATE TABLE ,如果你只是想刪除所有的行,並重新建立整個表。使用 DELETE ,如果你想刪除基於特定條件的有限數量的行,或者你不想要重置自動遞增值。