SQL - TRUNCATE TABLE

你好,有志於數據庫的愛好者們!今天,我們將深入探討 SQL 中最強大(有時候也相當可怕)的命令之一:TRUNCATE TABLE 說明。別擔心如果你是新手;我們會從基礎開始,然後逐步深入。所以,拿起你喜歡的飲料,放鬆身心,讓我們開始進入數據破壞的世界(當然是在好的意義上)!

SQL - Truncate Table

SQL TRUNCATE TABLE 說明

TRUNCATE TABLE 是什麼?

TRUNCATE TABLE 是一個 DDL(數據定義語言)命令,用於快速刪除表中的所有行。這就像在表上按下了“重置”按鈕,保留了其結構,但移除了所有內容。

基本語法

TRUNCATE TABLE 說明的基礎語法非常簡單:

TRUNCATE TABLE table_name;

讓我們分解一下:

  • TRUNCATE TABLE:這是實際的命令。
  • table_name:將這個替換成你想清空的表名。

真實世界範例

假設你正在管理一個圖書館的數據庫。你有一個叫做 borrowed_books 的表,記錄所有目前借出的書籍。在年末時,當所有書籍都已歸還,你想要清空這個表以為新的一年重新開始。

這樣做:

TRUNCATE TABLE borrowed_books;

然後,所有借出書籍的記錄都不見了!就像施展魔法一樣,讓所有數據消失。

重點考慮

  1. 無法撤銷:一旦你執行了 TRUNCATE TABLE,就無法回頭。這就像撕碎紙張一樣,無法恢復!

  2. 速度:TRUNCATE TABLE 比使用 DELETE 刪除所有行要快得多。

  3. 自增重置:如果你的表有自增列,TRUNCATE TABLE 將重置它到初始值(通常是 1)。

  4. 權限:你需要特殊權限才能使用 TRUNCATE TABLE。這不是一個可以輕鬆使用的命令!

TRUNCATE vs DELETE

現在你可能會想,“為什麼不直接使用 DELETE?”這個問題問得好!讓我們比較一下這兩個數據移除的巨人。

比較表

特性 TRUNCATE DELETE
速度 非常快 較慢,特別是大表
日誌 最小日誌記錄 完全記錄
WHERE 子句 不支持 支持
回滾 無法回滾 可以回滾
觸發器 不觸發 觸發
返回 不返回刪除的行數 返回刪除的行數

當使用 TRUNCATE

當:

  1. 你想從表中刪除所有行。
  2. 你不需要記錄單個行的刪除。
  3. 你想要重置自增列。
  4. 性能至關重要。

當使用 DELETE

當:

  1. 你想移除特定的行(使用 WHERE 子句)。
  2. 你需要能夠回滾操作。
  3. 你想要觸發器被觸發。
  4. 你需要知道刪除了多少行。

代碼範例

讓我們回到我們的圖書館數據庫。假設我們想移除所有出版於 1950 年之前的書籍:

使用 DELETE:

DELETE FROM books WHERE publication_year < 1950;

使用 TRUNCATE(如果所有書籍都是出版於 1950 年之前):

TRUNCATE TABLE books;

DELETE 說明允許我們指定哪些書籍要移除,而 TRUNCATE 則會無論出版年份如何移除所有書籍。

TRUNCATE vs DROP

現在我們將另一個命令引入場:DROP 說明。它與我們的朋友 TRUNCATE 相比如何?

比較表

特性 TRUNCATE DROP
表結構 保持 移除
速度 非常快
數據恢復 困難 沒有備份時不可能
權限 需要 ALTER 權限 需要 DROP 權限
使用場景 清除數據,保留結構 移除整個表

當使用 TRUNCATE

當:

  1. 你想快速從表中移除所有數據。
  2. 你想要保持表結構完整。
  3. 你計劃立即重新使用表。

當使用 DROP

當:

  1. 你想移除整個表,包括其結構。
  2. 你完全不需要該表。
  3. 你想從頭創建新表。

代碼範例

假設我們正在重新組織我們的圖書館數據庫,並想從頭開始創建新的 books 表:

使用 TRUNCATE:

TRUNCATE TABLE books;
-- 表是空的,但仍然存在

使用 DROP:

DROP TABLE books;
-- 表不再存在

在 TRUNCATE 之後,你可以立即在 books 表中插入新數據。在 DROP 之後,你需要重新創建表結構才能添加任何數據。

結論

好了,各位!我們已經穿越了 TRUNCATE TABLE 的領地,並在途中與它的親戚 DELETE 和 DROP 做了比較。記住,能力越強,責任越大。TRUNCATE TABLE 是一個強大的工具,但請謹慎使用。在按 Enter 鍵之前,一定要雙重檢查你的表名!

最後,這位老數據庫老師給你一個忠告:在進行任何重大的數據庫操作之前,一定要做好備份。相信我,它已經不止一次救了我的命!

快樂編程,願你的數據庫總是能高效管理!

Credits: Image by storyset