Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

SQL DDL 是什麼?五個指令一次學會:CREATE、ALTER、TRUNCATE、DROP、RENAME

最後更新:2026年4月7日資料庫

SQL 有四大分類:

  • DDL(資料定義語言)負責處理表格的「結構」。
  • DML(資料操作語言)負責處理表格的「資料」。
  • DCL(資料控制語言)負責處理「權限」。
  • TCL(交易控制語言)負責處理「交易」。

這篇文章要來聊聊其中一個很重要的分類——DDL(Data Definition Language,資料定義語言)。

DDL 總共有五個指令:CREATE、ALTER、TRUNCATE、DROP、RENAME。

學完這篇,你就會知道什麼時候該用哪個指令,以及它們之間的差異。

DDL 是什麼?跟 DML 有什麼不同?

簡單來說,DDL 就是用來處理表格「結構」的指令。

什麼是表格的結構?就是「有幾個欄位」、「欄位叫什麼名字」、「每個欄位的資料型態是什麼」這些事情。

我們用一個例子來說明。

假設有一張 employee 表格,長這樣:

IDNameDepartmentSalary
1AliceHR50000
2BobIT60000
NameAlice
DepartmentHR
Salary50000
NameBob
DepartmentIT
Salary60000

這張表格有兩個面向:

  1. 結構面:有 4 個欄位(ID、Name、Department、Salary),每個欄位有各自的資料型態。
  2. 資料面:有 2 筆資料(Alice 和 Bob 的紀錄)。

如果你要「新增一個欄位」或「把整張表格刪掉」,這就是在動結構,屬於 DDL。

如果你要「把 Bob 的薪水從 60000 改成 70000」,這就是在動資料,屬於 DML。

DDL 指令的重要特性:自動提交(Auto Commit)

在學五個指令之前,有一個很重要的觀念要先知道。

什麼是 COMMIT 和 ROLLBACK

在資料庫的世界裡,你對資料做的每一個操作,並不會馬上永久儲存。

這些操作會先暫時存在一個「暫存區」裡,等你確認沒問題之後,再用 COMMIT(提交)指令把修改永久寫進資料庫。

如果你做到一半發現改錯了,還可以用 ROLLBACK(回滾)指令,把所有還沒提交的修改通通撤銷,回到上一次 COMMIT 的狀態。

你可以把它想像成在用 Git:

你在本地改了一堆程式碼,這些修改還只是停留在工作目錄裡,還沒有被記錄下來。

當你執行 git commit,修改就被正式提交了,這就是 COMMIT。

但如果你改到一半發現改錯了,可以用 git checkout 把檔案還原回上一次 commit 的狀態,這就是 ROLLBACK。

DDL 的自動提交

但 DDL 指令比較特別,它執行後會自動提交(Auto Commit)。

類型執行後能否 ROLLBACK需要手動 COMMIT 嗎
DML可以,還沒 COMMIT 前都能復原需要,要自己按「儲存」
DDL不行,執行就生效不需要,系統自動幫你「儲存」
執行後能否 ROLLBACK可以,還沒 COMMIT 前都能復原
需要手動 COMMIT 嗎需要,要自己按「儲存」
執行後能否 ROLLBACK不行,執行就生效
需要手動 COMMIT 嗎不需要,系統自動幫你「儲存」

也就是說,你一執行 DDL 指令,系統就會自動幫你按下「儲存」,修改立刻生效並且永久儲存,完全沒有機會用 ROLLBACK 來復原。

所以在執行 DDL 指令之前,一定要想清楚再動手,特別是 TRUNCATE 和 DROP 這種破壞性的操作。

CREATE——建立新表格

CREATE 是用來「從零開始建立一張表格」的指令。

假設現在資料庫裡什麼都沒有,我想建立一張有 4 個欄位的 employee 表格。

語法長這樣:

CREATE TABLE employee (
    ID     NUMBER,
    Name   VARCHAR2(50),
    Department VARCHAR2(50),
    Salary NUMBER
);

執行之後,資料庫就會多出一張叫做 employee 的表格,裡面有 4 個欄位。

IDNameDepartmentSalary
Name
Department
Salary

為什麼 CREATE 是 DDL 指令?因為它在定義表格的結構:有幾個欄位、欄位叫什麼、資料型態是什麼。

這些全部都是結構層面的事情。

ALTER——修改現有表格的結構

假設你已經建好了 employee 表格,但後來發現少了一個 Gender 欄位。

這時候你不需要把表格砍掉重建,只要用 ALTER 就可以了。

ALTER 可以做三件事:

新增欄位

ALTER TABLE employee ADD (Gender VARCHAR2(10));

這樣 employee 表格就會從 4 個欄位變成 5 個欄位。

IDNameDepartmentSalaryGender
1AliceHR50000
2BobIT60000
NameAlice
DepartmentHR
Salary50000
Gender
NameBob
DepartmentIT
Salary60000
Gender

刪除欄位

ALTER TABLE employee DROP COLUMN Gender;

如果某個欄位不需要了,可以用這個方式把它移除。

IDNameDepartmentSalary
1AliceHR50000
2BobIT60000
NameAlice
DepartmentHR
Salary50000
NameBob
DepartmentIT
Salary60000

修改欄位的資料型態

ALTER TABLE employee MODIFY (Name VARCHAR2(100));

例如原本 Name 欄位最多只能存 50 個字元,現在想改成 100 個字元。

不管是新增、刪除還是修改欄位,ALTER 都是在動表格的結構,所以它也是 DDL 指令。

TRUNCATE——清空表格裡的所有資料

TRUNCATE 的作用是「把表格裡的資料全部刪光,但保留表格本身」。

語法很簡單:

TRUNCATE TABLE student;

我們用一個例子來看。

假設有一張 student 表格:

IDName
1Alice
2Bob
3Carol
NameAlice
NameBob
NameCarol

執行 TRUNCATE TABLE student; 之後,表格會變成:

IDName
Name

資料全部不見了,但表格還在。

你之後還是可以新增資料、新增欄位,做任何操作,因為表格本身並沒有被刪除。

要特別注意的是,TRUNCATE 是 DDL 指令,所以它會自動提交,一旦執行就無法復原。

在按下 Enter 之前,請務必確認你真的要清空這張表格。

TRUNCATE 和 DELETE 有什麼不同?

看到這裡你可能會想:「等一下,DML 裡面不是也有一個 DELETE 指令可以刪資料嗎?那它跟 TRUNCATE 差在哪?」

確實,DELETE 也可以刪除表格裡的資料,但兩者的運作方式完全不同。

DELETE 是一筆一筆刪除資料,而且可以加上 WHERE 條件,只刪除符合條件的特定幾筆。

例如只刪除名字是 Alice 的那筆紀錄:

DELETE FROM student WHERE Name = 'Alice';

而 TRUNCATE 是一口氣把整張表格的資料全部清掉,沒辦法指定條件。

另外,因為 DELETE 是 DML 指令,執行後還可以用 ROLLBACK 來反悔。

但 TRUNCATE 是 DDL 指令,執行後就自動提交了,完全沒有反悔的機會。

比較項目TRUNCATE(DDL)DELETE(DML)
刪除範圍只能清空全部資料可以用 WHERE 指定條件
執行速度較快較慢(逐筆處理)
能否 ROLLBACK不能(Auto Commit)可以(還沒 COMMIT 前都能復原)
表格結構保留保留
TRUNCATE(DDL)只能清空全部資料
DELETE(DML)可以用 WHERE 指定條件
TRUNCATE(DDL)較快
DELETE(DML)較慢(逐筆處理)
TRUNCATE(DDL)不能(Auto Commit)
DELETE(DML)可以(還沒 COMMIT 前都能復原)
TRUNCATE(DDL)保留
DELETE(DML)保留

DROP——把整張表格徹底刪除

DROP 和 TRUNCATE 很像,但更加徹底。

語法也很簡單:

DROP TABLE student;

同樣用 student 表格來舉例。

執行 DROP TABLE student; 之後,不只資料沒了,連表格本身、索引、所有相關的東西都會從資料庫中完全消失。

SQL 中 TRUNCATE 和 DROP 的差別

這兩個指令很容易搞混,用一張表格來比較:

比較項目TRUNCATEDROP
資料全部刪除全部刪除
表格結構保留一併刪除
執行後能否繼續操作可以,表格還在不行,表格已經不存在了
能否復原不能(Auto Commit)不能(Auto Commit)
TRUNCATE全部刪除
DROP全部刪除
TRUNCATE保留
DROP一併刪除
TRUNCATE可以,表格還在
DROP不行,表格已經不存在了
TRUNCATE不能(Auto Commit)
DROP不能(Auto Commit)

簡單記:TRUNCATE 是「清空」,DROP 是「銷毀」。

RENAME——重新命名表格

RENAME 是用來「把表格換一個名字」的指令。

語法就像一句英文:

RENAME student TO student_info;

執行之後,原本叫 student 的表格就會變成 student_info。

表格裡面的欄位和資料完全不會改變,只有名字不一樣了。

為什麼 RENAME 也是 DDL?因為欄位是跟著表格名稱走的。

當你改了表格名稱,等於改變了整個表格的結構定義,所以它也屬於 DDL。

DDL 五個指令重點整理

這篇文章介紹了 DDL 的五個指令:

  1. CREATE:建立新的表格。
  2. ALTER:修改現有表格的結構(新增欄位、刪除欄位、修改資料型態)。
  3. TRUNCATE:清空表格的所有資料,但保留表格結構。
  4. DROP:把整張表格從資料庫中徹底刪除。
  5. RENAME:重新命名表格。

最重要的一點是,DDL 指令都具有自動提交(Auto Commit)的特性,一旦執行就無法復原。

所以在使用 TRUNCATE 和 DROP 這類破壞性指令時,一定要特別小心。

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

資料庫

目錄

  • DDL 是什麼?跟 DML 有什麼不同?
  • DDL 指令的重要特性:自動提交(Auto Commit)
  • 什麼是 COMMIT 和 ROLLBACK
  • DDL 的自動提交
  • CREATE——建立新表格
  • ALTER——修改現有表格的結構
  • 新增欄位
  • 刪除欄位
  • 修改欄位的資料型態
  • TRUNCATE——清空表格裡的所有資料
  • TRUNCATE 和 DELETE 有什麼不同?
  • DROP——把整張表格徹底刪除
  • SQL 中 TRUNCATE 和 DROP 的差別
  • RENAME——重新命名表格
  • DDL 五個指令重點整理