Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

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

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

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

資料庫入門:CRUD——資料操作的四種類型

最後更新:2025年12月31日資料庫

前面的文章我們學會了如何設計資料庫表格,把雜亂的資料整理成有結構的欄位和列。

但光是把資料存進去還不夠,我們還需要對資料進行各種操作:新增一筆訂單、查詢會員資料、修改個人資訊、刪除過期紀錄⋯⋯

這些操作看起來五花八門,但其實只有四種類型。這篇文章要介紹的就是資料庫操作的核心觀念——CRUD。

從 ATM 提款看資料操作

讓我們用一個 ATM 提款的例子,來理解資料庫的四種操作。

只儲存餘額的問題

假設你去 ATM 領錢,最直覺的設計是這樣:

  1. 讀取你的帳戶餘額(例如:100 元)
  2. 你領了 50 元
  3. 更新你的帳戶餘額為 50 元

用表格來看,這種設計只會儲存一個「餘額」欄位:

帳戶餘額
小明100
餘額100

領錢後變成:

帳戶餘額
小明50
餘額50

這個做法很直覺,但有一個大問題:沒有留下紀錄。

如果你的帳戶被盜領,你說「我沒有領這筆錢」,但銀行只有餘額資料,沒有操作紀錄,根本死無對證。

儲存操作紀錄的好處

所以實際上,銀行的做法應該是:

  1. 讀取你的操作紀錄
  2. 你領了 50 元
  3. 新增一筆提款紀錄:「小明在 3/15 10:30 提款 50 元」
  4. 系統根據所有紀錄計算出目前餘額

用表格來看,這種設計會儲存每一筆操作紀錄:

帳戶時間動作金額
小明3/15 09:00存款100
時間3/15 09:00
動作存款
金額100

領錢後,新增一筆紀錄:

帳戶時間動作金額
小明3/15 09:00存款100
小明3/15 10:30提款50
時間3/15 09:00
動作存款
金額100
時間3/15 10:30
動作提款
金額50

這樣一來,每一筆操作都有紀錄。如果被盜領,銀行可以查到「這筆提款是在某個時間、某個地點發生的」,就能判斷是不是本人操作。

餘額欄位是必要的嗎?

你可能會問:「那餘額要存在哪裡?」

其實,餘額根本不需要另外儲存。

為什麼?因為餘額就是「所有存款金額加總 – 所有提款金額加總」的結果。只要把操作紀錄讀取出來,就可以算出餘額。

帳戶時間動作金額
小明3/15 09:00存款100
小明3/15 10:30提款50
時間3/15 09:00
動作存款
金額100
時間3/15 10:30
動作提款
金額50

從這張表計算餘額:

  • 存款總額:100
  • 提款總額:50
  • 餘額 = 100 – 50 = 50

換句話說:

餘額 = 讀取操作紀錄 + 計算

所以「計算」其實是「讀取」的延伸。你必須先讀取資料,才能進行計算。在資料庫操作的分類中,我們把「計算」和「讀取」視為同一種類型。

資料的更新與刪除

假設銀行確認你真的被盜領了,他們會怎麼處理?

直覺的做法是:把那筆盜領紀錄刪除。

帳戶時間動作金額
小明3/15 09:00存款100
小明3/15 10:30提款50
時間3/15 09:00
動作存款
金額100
時間3/15 10:30
動作提款
金額50

但實際上銀行通常不會真的刪除資料,而是更新那筆紀錄,把它標記為「無效」或「盜刷」。

帳戶時間動作金額狀態
小明3/15 09:00存款100有效
小明3/15 10:30提款50無效(盜刷)
時間3/15 09:00
動作存款
金額100
狀態有效
時間3/15 10:30
動作提款
金額50
狀態無效(盜刷)

為什麼不直接刪除?因為這筆紀錄本身還是有價值的:

  • 可以追查盜刷發生的時間、地點
  • 可以作為報案或調查的證據
  • 可以統計盜刷的頻率和金額

所以銀行選擇「保留紀錄,但標記為無效」。計算餘額時,系統只會加總「狀態 = 有效」的紀錄,無效的紀錄就不會計入。

這就是「更新」和「刪除」的差異:

  • 刪除:資料完全消失,無法復原
  • 更新:資料還在,只是改變了某個欄位的值

CRUD:資料操作的四種類型

從上面的 ATM 例子,我們可以歸納出資料操作只有四種類型,可以分成兩大類:

資料的增減

這類操作會改變資料表中「有幾筆資料」。

Create(新增)

在資料表中新增一筆資料。

例如:

  • 新增一筆提款紀錄
  • 新增一個會員帳號
  • 新增一筆訂單

Delete(刪除)

從資料表中刪除一筆資料。

例如:

  • 刪除一筆錯誤的紀錄
  • 刪除已經退會的會員
  • 刪除過期的優惠券

現有資料的操作

這類操作不會改變資料筆數,只會針對已經存在的資料進行讀取或修改。

Read(讀取)

從資料表中讀取資料。

例如:

  • 讀取帳戶的所有交易紀錄
  • 查詢某個會員的資料
  • 計算這個月的總銷售額(先讀取資料,再計算)

💡 「計算」其實也是讀取的一部分。你必須先讀取資料,才能進行計算。

Update(更新)

修改已經存在的資料。

例如:

  • 把某筆紀錄標記為「無效」
  • 修改會員的電話號碼
  • 更新商品的價格

CRUD 與增刪改查

把這四種操作的英文字首排在一起:

操作英文中文
CCreate新增
RRead讀取(查詢)
UUpdate更新(修改)
DDelete刪除
英文Create
中文新增
英文Read
中文讀取(查詢)
英文Update
中文更新(修改)
英文Delete
中文刪除

CRUD 唸起來像一個英文單字,所以大家都這樣叫。

中文的話,常見的說法是「增刪改查」或「增刪查改」,順序不太固定,但指的都是這四種操作。

這兩個詞你都要記得,因為:

  • 聽到有人說 CRUD,就知道在講資料操作的四種類型
  • 聽到有人說增刪改查,也是同樣的意思

CRUD 涵蓋所有資料操作

你可能會想:「真的只有這四種嗎?不會有第五種嗎?」

目前來說,所有的資料操作都可以歸類到這四種。不管你要做什麼,都是這四種的組合:

  • 註冊帳號 → Create(新增一筆會員資料)
  • 登入 → Read(讀取會員資料,驗證密碼)
  • 改密碼 → Update(更新密碼欄位)
  • 刪除帳號 → Delete(刪除會員資料)

再複雜的功能,拆解下來都是 CRUD 的組合。

欄位(Column)可以增減嗎?

前面我們學過,資料操作都是針對「列」(Row)來進行的:

  • 新增一列資料
  • 讀取某幾列資料
  • 更新某一列的某個欄位
  • 刪除某一列資料

那「欄位」(Column)可以隨意增減嗎?

一般來說,不建議輕易改動欄位。

為什麼?因為欄位定義了資料的結構。如果你隨意增減欄位,之前寫好的程式可能會出錯,之前的查詢邏輯也要跟著改。

所以在設計資料庫時,會建議:

  • 一開始就想清楚需要哪些欄位
  • 欄位確定後,盡量不要改動

但有些情況下,資料的「共同性質」並不固定,或者會一直變動,這時候傳統的表格設計就會遇到困難。

舉個例子,假設你要設計一個「商品」資料表:

  • 書籍有:書名、作者、頁數、ISBN
  • 衣服有:品名、尺寸、顏色、材質
  • 食品有:品名、重量、有效期限、成分

這三種商品的「共同性質」完全不同。如果硬要用同一張表格來存,你可能要開很多欄位,但每筆資料都只會用到其中幾個欄位,其他都是空的。

這種情況下,傳統的「欄位固定」設計就會很彆扭。

這就牽涉到資料庫的不同流派:有些資料庫堅持「欄位要固定」,有些資料庫則允許「欄位可以彈性變動」。我們之後會再詳細介紹這兩種流派的差異。

小結

這篇文章介紹了資料操作的四種類型:

英文中文說明
Create新增在資料表中新增一筆資料
Read讀取從資料表中讀取資料
Update更新修改已經存在的資料
Delete刪除從資料表中刪除資料
中文新增
說明在資料表中新增一筆資料
中文讀取
說明從資料表中讀取資料
中文更新
說明修改已經存在的資料
中文刪除
說明從資料表中刪除資料

這四種操作合稱 CRUD,中文叫「增刪改查」。

不管多複雜的系統,所有的資料操作都可以拆解成這四種類型的組合。記住這個觀念,之後學習 SQL 語法時,你會發現 SQL 的指令也是對應這四種操作。

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

發表留言

留言將在審核後顯示。

資料庫

目錄

  • 從 ATM 提款看資料操作
  • 只儲存餘額的問題
  • 儲存操作紀錄的好處
  • 餘額欄位是必要的嗎?
  • 資料的更新與刪除
  • CRUD:資料操作的四種類型
  • 資料的增減
  • 現有資料的操作
  • CRUD 與增刪改查
  • CRUD 涵蓋所有資料操作
  • 欄位(Column)可以增減嗎?
  • 小結