Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

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

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

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

資料庫表單與資料操作:表單的新增、修改、刪除

最後更新:2026年1月14日資料庫

上一篇我們介紹了 Pseudo Code 的表示方式,讓你知道接下來的語法要怎麼看。

從這篇開始,我們要正式學習如何操作資料庫了。

在資料庫裡面,操作分成兩個層級:

  • 表單層級:對整張表做新增、修改、刪除
  • 資料層級:對表裡面的每一筆資料做新增、查詢、修改、刪除

這篇文章會先從「表單操作」開始。

表單操作的範圍

當我們說「操作表單」的時候,不是只有對表單本身做事情。

一張表單裡面會有欄位。

欄位上面可以設定限制,像是 PRIMARY KEY、FOREIGN KEY、UNIQUE 等等。

另外還有「型別」,也就是這個欄位要存什麼類型的資料,像是文字、數字、時間等等。

因為同一個欄位裡面,每一筆資料的性質都一樣(例如「姓名」這個欄位,每一筆都是文字),所以我們會在一開始就把型別固定下來。

整理一下,表單操作的範圍包含:

表單本身:

  • 新增一張表單
  • 刪除一張表單
  • 重新命名表單

欄位:

  • 新增欄位
  • 刪除欄位
  • 重新命名欄位

欄位的型別:

  • 設定型別(這個欄位要存什麼類型的資料)
  • 變更型別

欄位的限制:

  • 新增限制(像是 PRIMARY KEY、FOREIGN KEY、UNIQUE、CHECK 等等)
  • 移除限制

💡 小提醒:表單操作用的英文字,跟資料操作用的不一樣,等一下會特別說明。

創建表單:CREATE TABLE

要建立一張新的表單,我們用 CREATE TABLE 這個指令。

基本語法

CREATE TABLE {表單名稱} (
    {欄位名稱} 型別 [限制],
    {欄位名稱} 型別 [限制],
    ...
);

在看完整範例之前,我們先來了解幾個重要的概念。

欄位可以設定什麼?

每個欄位可以設定這些東西:

  1. 型別(必填):這個欄位要存什麼類型的資料
  2. 限制(選填):這個欄位有什麼規則
  3. 預設值(選填):如果沒填值,要自動填入什麼

接下來一個一個說明。

型別

型別就是這個欄位要存什麼類型的資料。

常見的型別有:

  • 字串:文字資料,例如姓名、地址
  • 數字:數值資料,例如年齡、價格
  • 時間:日期時間資料,例如建立時間、生日

這些型別是資料庫本身就有的,你不需要自己定義,只要從裡面選一個來用就好。

每個欄位一定要設定型別,這是必填的。

限制

限制就是這個欄位的規則。

常見的限制有:

  • PRIMARY KEY:主鍵,這個欄位的值不能重複,用來識別每一筆資料
  • FOREIGN KEY:外鍵,這個欄位的值必須參照另一張表的某個欄位
  • UNIQUE:這個欄位的值不能重複
  • CHECK:自訂驗證規則,例如規定年齡必須大於等於 18 歲,不符合條件的資料就無法存進去

預設值 DEFAULT

有時候你希望某個欄位在沒有填值的情況下,自動幫你填上一個值。

這時候就可以用 DEFAULT。

常見的用法有兩個:

  • 主鍵自動產生 UUID:每次新增一筆資料,id 就會自動產生一個不重複的編號
  • 建立時間自動填入現在時間:每次新增一筆資料,就會自動記錄當下的時間

完整範例

了解了上面這些概念之後,我們來看怎麼寫一個完整的 CREATE TABLE。

第一步:寫出 CREATE TABLE 和表單名稱

語法:

CREATE TABLE {表單名稱}

範例:

CREATE TABLE 講師

這樣就告訴資料庫:我要建立一張叫「講師」的表單。

第二步:用圓括號包住所有欄位

語法:

CREATE TABLE {表單名稱} (
    ...
)

範例:

CREATE TABLE 講師 (
    ...
)

圓括號在 SQL 裡面通常代表「一組東西」,你可以把它想成一個清單。

在這裡,圓括號裡面放的就是「這張表單有哪些欄位」的清單。

第三步:填入欄位和型別

語法:

CREATE TABLE {表單名稱} (
    {欄位名稱} 型別
);

範例:

CREATE TABLE 講師 (
    姓名 字串
);

一個欄位只要寫「欄位名稱」和「型別」就好。

這樣就建立了一張「講師」表單,裡面有一個「姓名」欄位,型別是字串。

第四步:加入更多欄位

語法:

CREATE TABLE {表單名稱} (
    {欄位名稱} 型別,
    {欄位名稱} 型別
);

範例:

CREATE TABLE 講師 (
    id 字串,
    姓名 字串
);

如果有多個欄位,用逗號隔開。

第五步:加上限制和預設值

語法:

CREATE TABLE {表單名稱} (
    {欄位名稱} 型別 [限制] [DEFAULT 預設值],
    {欄位名稱} 型別
);

範例:

CREATE TABLE 講師 (
    id 字串 PRIMARY KEY DEFAULT UUID(),
    姓名 字串
);

這裡的 id 欄位設定了:

  • PRIMARY KEY:這是主鍵
  • DEFAULT UUID():如果沒填值,自動產生一個不重複的編號

第六步:加上建立時間

範例:

CREATE TABLE 講師 (
    id 字串 PRIMARY KEY DEFAULT UUID(),
    姓名 字串,
    建立時間 時間 DEFAULT NOW()
);

這裡的 建立時間 欄位用 DEFAULT NOW() 設定預設值。

每次新增一筆資料,就會自動記錄當下的時間。

第七步:加上 CHECK 限制

範例:

CREATE TABLE 會員 (
    id 字串 PRIMARY KEY DEFAULT UUID(),
    姓名 字串,
    年齡 數字 CHECK (年齡 >= 18),
    建立時間 時間 DEFAULT NOW()
);

這裡的 年齡 欄位用 CHECK (年齡 >= 18) 設定限制。

如果有人想填入 17 歲,資料庫就會拒絕,不讓這筆資料存進去。

變更表單:ALTER TABLE

表單建好之後,你可能還需要做一些修改。

這時候用 ALTER TABLE 這個指令。

ALTER 是「變更」的意思,所以 ALTER TABLE 就是「變更表單」。

創建 vs 變更的差別

創建表單變更表單
指令CREATE TABLEALTER TABLE
操作對象表單 + 欄位一起設定可以分開處理
創建表單CREATE TABLE
變更表單ALTER TABLE
創建表單表單 + 欄位一起設定
變更表單可以分開處理

創建表單的時候,我們是同時設定「表單」和「欄位」,一次完成。

但在變更表單的時候,可以分開處理:

  • 針對「表單本身」做變更
  • 針對「欄位」做變更

變更表單可以做什麼?

表單本身:

  • 重新命名表單

欄位:

  • 重新命名欄位
  • 新增欄位
  • 移除欄位
  • 變更欄位型別
  • 新增欄位限制
  • 移除欄位限制

接下來一個一個看語法怎麼寫。

重新命名

有時候表單或欄位的名稱取得不好,或是需求改變了,就會需要重新命名。

重新命名表單

語法:

ALTER TABLE {舊表單名稱} 
    RENAME TO {新表單名稱};

範例:

ALTER TABLE 講師 
    RENAME TO 教師;

重新命名欄位

語法:

ALTER TABLE {表單名稱} 
    RENAME COLUMN {舊欄位名稱} TO {新欄位名稱};

範例:

ALTER TABLE 講師 
    RENAME COLUMN 姓名 TO 講師姓名;

新增與移除欄位

隨著系統的發展,你可能會需要在現有的表單中加入新的欄位,或是把不需要的欄位移除。

新增欄位

語法:

ALTER TABLE {表單名稱} 
    ADD COLUMN {欄位名稱} 型別 [限制];

範例:假設補習班開了新的據點,我們需要記錄每個講師屬於哪個據點。

ALTER TABLE 講師 
    ADD COLUMN 據點id 字串 FOREIGN KEY REFERENCES 據點(id);

移除欄位

語法:

ALTER TABLE {表單名稱} 
    DROP COLUMN {欄位名稱};

範例:

ALTER TABLE 講師 
    DROP COLUMN 據點id;

⚠️ 警告:移除欄位是很危險的操作。如果這個欄位被其他表單的 FOREIGN KEY 參照,強制刪除可能會出問題。動手之前,請先確認這個欄位沒有被其他地方使用。

變更欄位的型別與限制

有時候欄位的型別或限制需要調整,例如原本存數字的欄位改成存字串,或是要加上新的限制。

變更型別

語法:

ALTER TABLE {表單名稱} 
    ALTER COLUMN {欄位名稱} TYPE {新型別};

新增限制

語法:

ALTER TABLE {表單名稱} 
    ALTER COLUMN {欄位名稱} SET {限制};

移除限制

語法:

ALTER TABLE {表單名稱} 
    ALTER COLUMN {欄位名稱} DROP {限制};

刪除表單:DROP TABLE

如果你要把一整張表單刪掉,用 DROP TABLE。

DROP TABLE {表單名稱};

就這麼簡單,一行指令,整張表就消失了。

⚠️ 警告:DROP TABLE 是非常危險的操作。刪掉就是刪掉了,沒有資源回收桶可以找回來。

在執行 DROP 之前,請確認:

  • 這張表真的不需要了嗎?
  • 有沒有其他程式在讀這張表的資料?
  • 有沒有其他表的 FOREIGN KEY 指向這張表?

如果不確定,先問問前輩或同事再動手。

實戰範例:建立補習班系統

讓我們用前面學過的語法,實際建立一個補習班系統的資料庫。

建立基本表單

補習班系統需要記錄講師、學生、課程這些資料,所以我們先建立這三張表單。

建立講師表

CREATE TABLE 講師 (
    id 字串 PRIMARY KEY DEFAULT UUID(),
    姓名 字串
);

建立學生表

CREATE TABLE 學生 (
    id 字串 PRIMARY KEY DEFAULT UUID(),
    姓名 字串
);

建立課程表

CREATE TABLE 課程 (
    id 字串 PRIMARY KEY DEFAULT UUID(),
    科目 字串,
    年級 數字
);

💡 為什麼年級用數字?因為之後可能會需要排序(例如按年級高低排列),用數字比較方便。

建立關係表

講師和課程之間有「誰教哪堂課」的關係,學生和課程之間有「誰選了哪堂課」的關係。

這些關係需要用關係表來記錄。

建立講授表(講師 ↔ 課程)

CREATE TABLE 講授 (
    id 字串 PRIMARY KEY DEFAULT UUID(),
    課程id 字串 FOREIGN KEY REFERENCES 課程(id),
    講師id 字串 FOREIGN KEY REFERENCES 講師(id)
);

建立選課表(學生 ↔ 課程)

CREATE TABLE 選課 (
    id 字串 PRIMARY KEY DEFAULT UUID(),
    課程id 字串 FOREIGN KEY REFERENCES 課程(id),
    學生id 字串 FOREIGN KEY REFERENCES 學生(id)
);

到這裡,補習班系統的基本架構就建立完成了。

加入「據點」功能

假設補習班擴大了,有多個據點,我們需要記錄每個講師屬於哪個據點。

建立據點表

CREATE TABLE 據點 (
    id 字串 PRIMARY KEY DEFAULT UUID(),
    名稱 字串
);

在講師表加入據點欄位

ALTER TABLE 講師 
    ADD COLUMN 據點id 字串 FOREIGN KEY REFERENCES 據點(id);

這樣講師表就多了一個欄位,可以記錄每個講師屬於哪個據點。

同樣的,學生表和教室表如果也需要記錄據點,也是用一樣的方式加入欄位。

加入「學生上限」

假設每堂課有人數限制,我們需要在課程表加入一個欄位:

ALTER TABLE 課程 
    ADD COLUMN 學生上限 數字;

合併講師表和學生表

假設系統改版,決定把「講師」和「學生」合併成一張「人員」表,用「身份」欄位來區分。

這時候有兩種做法:

做法一:建立新表,搬移資料

直接建立一張新的「人員」表,然後把講師和學生的資料搬過去。

做法二:改名 + 加欄位

保留其中一張表,改名後加入新欄位,再把另一張表的資料搬過來。

以做法二為例:

把講師表改名為人員表

ALTER TABLE 講師 
    RENAME TO 人員;

加入身份欄位

ALTER TABLE 人員 
    ADD COLUMN 身份 字串;

搬移資料

接下來要做的事情是:

  1. 把人員表裡原本的資料,身份都填上「講師」
  2. 把學生表的資料搬到人員表,身份填上「學生」

這部分涉及到「資料操作」,會在下一篇文章介紹。

更新其他表的 FOREIGN KEY

因為講師表已經改名為人員表,所以其他有參照講師表的地方也要更新。

例如講授表原本參照的是「講師」表,現在要改成參照「人員」表:

ALTER TABLE 講授 
    ALTER COLUMN 講師id SET FOREIGN KEY REFERENCES 人員(id);

移除學生表?

資料都搬完之後,學生表是不是要刪掉?

建議先不要急著刪。

可以先保留一段時間,確認沒有其他程式還在用這張表,再決定要不要移除。

💡 在實務上,刪除表單是很危險的操作。如果不確定,先問問前輩或同事。

小結

這篇文章介紹了表單層級的三個操作:

操作指令用途
新增CREATE TABLE建立新表單
修改ALTER TABLE改名、加欄位、改限制
刪除DROP TABLE移除整張表單
指令CREATE TABLE
用途建立新表單
指令ALTER TABLE
用途改名、加欄位、改限制
指令DROP TABLE
用途移除整張表單

幾個重點提醒:

  • 建立欄位時,一定要設定型別
  • DEFAULT 可以設定預設值,常用於 id 和建立時間
  • CHECK 可以做資料驗證
  • DROP 操作要非常小心,刪掉就回不來了

下一篇我們會進入資料層級的操作,學習如何新增、查詢、修改、刪除資料。

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

發表留言

留言將在審核後顯示。

資料庫

目錄

  • 表單操作的範圍
  • 創建表單:CREATE TABLE
  • 基本語法
  • 欄位可以設定什麼?
  • 型別
  • 限制
  • 預設值 DEFAULT
  • 完整範例
  • 變更表單:ALTER TABLE
  • 創建 vs 變更的差別
  • 變更表單可以做什麼?
  • 重新命名
  • 新增與移除欄位
  • 變更欄位的型別與限制
  • 刪除表單:DROP TABLE
  • 實戰範例:建立補習班系統
  • 建立基本表單
  • 建立關係表
  • 加入「據點」功能
  • 加入「學生上限」
  • 合併講師表和學生表
  • 小結