Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

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

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

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

資料庫架構設計入門:用 NOT NULL 限制確保欄位必填

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

上一篇文章介紹了 NULL,讓我們可以在欄位中表示「沒有資料」。

但反過來想:有些欄位是不是不應該允許空值?

例如會員的姓名。一個會員一定要有姓名吧?如果連姓名都沒有,這個會員資料就不完整了。

這篇文章會介紹 NOT NULL 限制,以及什麼時候該用、什麼時候不該用。

有些欄位不能是空的

想一下會員和姓名的關係:

  • 一個會員最多可以有幾個姓名?→ 一個
  • 一個會員最少應該要有幾個姓名?→ 也是一個

姓名是會員的必要資訊,不能沒有。

如果有人新增一筆會員資料,卻沒有填姓名:

會員 ID會員姓名
U001David
U002NULL
會員姓名David
會員姓名NULL

這筆資料就不完整了。我們希望資料庫能夠自動擋住這種情況。

用 NOT NULL 限制確保必填

在繼續之前,先釐清一個容易混淆的觀念:NULL 和 NOT NULL 是不同層級的東西。

NULL 和 NOT NULL 的差異

NULL 是一個「值」

NULL 是儲存格(cell)裡面的值,代表「沒有資料」。

就像你在 Excel 的某一格裡面什麼都不填,那格就是空的。在資料庫裡,這個「空」就是 NULL。

會員 ID會員姓名配偶
U001DavidEmily
U002FrankNULL ← 這是一個值,代表「沒有配偶」
會員姓名David
配偶Emily
會員姓名Frank
配偶NULL ← 這是一個值,代表「沒有配偶」

NOT NULL 是一種「限制」

NOT NULL 是設定在欄位上的限制,告訴資料庫:「這個欄位不能出現 NULL 這個值。」

它不是填在儲存格裡的東西,而是欄位的規則。

欄位名稱限制
會員 ID–
會員姓名NOT NULL ← 這是欄位的規則
配偶–
限制–
限制NOT NULL ← 這是欄位的規則
限制–

NOT NULL 限制會擋住 NULL 值

簡單來說:

  • NULL:儲存格裡的值,代表「這格沒有資料」
  • NOT NULL:欄位的限制,代表「這個欄位不准出現 NULL」

當你對某個欄位設定 NOT NULL 限制,資料庫就會自動檢查:如果有人想在這個欄位填 NULL,就拒絕,不讓這筆資料存進來。

在姓名欄位加上 NOT NULL

我們在「會員表單」的「會員姓名」欄位加上 NOT NULL 限制:

會員表單:

會員 ID會員姓名(NOT NULL)
U001David
U002Emily
會員姓名(NOT NULL)David
會員姓名(NOT NULL)Emily

現在如果有人想新增一筆會員資料:

情況一:有填姓名

新增資料:會員 ID = U003, 會員姓名 = "Frank"

資料庫檢查:會員姓名有值 ✓ → 允許新增

情況二:沒填姓名

新增資料:會員 ID = U003, 會員姓名 = NULL

資料庫檢查:會員姓名是 NULL ✗ → 拒絕新增

資料庫會回報錯誤:「會員姓名欄位設定了 NOT NULL 限制,不能是空值,這筆資料不能存進來。」

這樣就能自動確保每個會員都有姓名,不用擔心有人漏填。

NULL 和 NOT NULL 是不同層級的概念

你可能會覺得 NULL 和 NOT NULL 看起來很像,只是一個有「NOT」一個沒有。但其實它們是完全不同層級的東西。

NULL 是儲存格裡的「值」

NULL 是資料庫儲存格(cell)裡的一種值,代表「沒有資料」。

會員 ID會員姓名配偶
U001DavidEmily
U002FrankNULL
會員姓名David
配偶Emily
會員姓名Frank
配偶NULL

在這個表格裡,Frank 的「配偶」欄位填的是 NULL,表示他沒有配偶。

NULL 是「資料」的一種,跟 “David”、”Emily” 一樣,都是儲存格裡的值。

NOT NULL 是欄位的「限制」

NOT NULL 不是一種值,而是對欄位設定的一種限制。

它是在告訴資料庫:「這個欄位不能出現 NULL 這個值。」

會員 ID會員姓名(NOT NULL)配偶
U001DavidEmily
U002FrankNULL
會員姓名(NOT NULL)David
配偶Emily
會員姓名(NOT NULL)Frank
配偶NULL

在這個表格裡:

  • 「會員姓名」欄位有 NOT NULL 限制,所以不能填 NULL
  • 「配偶」欄位沒有 NOT NULL 限制,所以可以填 NULL

NULL 和 NOT NULL 的比較

NULLNOT NULL
是什麼儲存格裡的值欄位的限制
層級資料層級欄位定義層級
意義「這格沒有資料」「這個欄位不能是空的」
設定時機新增或修改資料時設計表單結構時
NULL儲存格裡的值
NOT NULL欄位的限制
NULL資料層級
NOT NULL欄位定義層級
NULL「這格沒有資料」
NOT NULL「這個欄位不能是空的」
NULL新增或修改資料時
NOT NULL設計表單結構時

簡單來說:

  • NULL 是你在填資料時可以填的一種「值」
  • NOT NULL 是你在設計表單時可以加的一種「規則」

NOT NULL 重點整理

這篇文章介紹了 NOT NULL 限制的概念:

  1. 用途:確保某個欄位一定要有值,不能是空的
  2. 效果:資料庫會自動檢查,如果欄位是 NULL 就拒絕新增
  3. 不要濫用:不是所有欄位都要 NOT NULL,只有真正必要的才設
  4. 考量使用者體驗:每多一個必填欄位,就是多一個填寫門檻
  5. 設定前先確認:跟老闆或 PM 確認哪些欄位是必填的

到目前為止,我們已經學了兩種欄位限制:

  • UNIQUE:確保欄位的值不重複
  • NOT NULL:確保欄位一定要有值

後續的文章會繼續介紹其他種類的限制。

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

發表留言

留言將在審核後顯示。

資料庫

目錄

  • 有些欄位不能是空的
  • 用 NOT NULL 限制確保必填
  • NULL 和 NOT NULL 的差異
  • NOT NULL 限制會擋住 NULL 值
  • 在姓名欄位加上 NOT NULL
  • NULL 和 NOT NULL 是不同層級的概念
  • NULL 是儲存格裡的「值」
  • NOT NULL 是欄位的「限制」
  • NULL 和 NOT NULL 的比較
  • NOT NULL 重點整理