上一篇文章介紹了 NULL,讓我們可以在欄位中表示「沒有資料」。
但反過來想:有些欄位是不是不應該允許空值?
例如會員的姓名。一個會員一定要有姓名吧?如果連姓名都沒有,這個會員資料就不完整了。
這篇文章會介紹 NOT NULL 限制,以及什麼時候該用、什麼時候不該用。
有些欄位不能是空的
想一下會員和姓名的關係:
- 一個會員最多可以有幾個姓名?→ 一個
- 一個會員最少應該要有幾個姓名?→ 也是一個
姓名是會員的必要資訊,不能沒有。
如果有人新增一筆會員資料,卻沒有填姓名:
| 會員 ID | 會員姓名 |
|---|---|
| U001 | David |
| U002 | NULL |
這筆資料就不完整了。我們希望資料庫能夠自動擋住這種情況。
用 NOT NULL 限制確保必填
在繼續之前,先釐清一個容易混淆的觀念:NULL 和 NOT NULL 是不同層級的東西。
NULL 和 NOT NULL 的差異
NULL 是一個「值」
NULL 是儲存格(cell)裡面的值,代表「沒有資料」。
就像你在 Excel 的某一格裡面什麼都不填,那格就是空的。在資料庫裡,這個「空」就是 NULL。
| 會員 ID | 會員姓名 | 配偶 |
|---|---|---|
| U001 | David | Emily |
| U002 | Frank | NULL ← 這是一個值,代表「沒有配偶」 |
NOT NULL 是一種「限制」
NOT NULL 是設定在欄位上的限制,告訴資料庫:「這個欄位不能出現 NULL 這個值。」
它不是填在儲存格裡的東西,而是欄位的規則。
| 欄位名稱 | 限制 |
|---|---|
| 會員 ID | – |
| 會員姓名 | NOT NULL ← 這是欄位的規則 |
| 配偶 | – |
NOT NULL 限制會擋住 NULL 值
簡單來說:
- NULL:儲存格裡的值,代表「這格沒有資料」
- NOT NULL:欄位的限制,代表「這個欄位不准出現 NULL」
當你對某個欄位設定 NOT NULL 限制,資料庫就會自動檢查:如果有人想在這個欄位填 NULL,就拒絕,不讓這筆資料存進來。
在姓名欄位加上 NOT NULL
我們在「會員表單」的「會員姓名」欄位加上 NOT NULL 限制:
會員表單:
| 會員 ID | 會員姓名(NOT NULL) |
|---|---|
| U001 | David |
| U002 | Emily |
現在如果有人想新增一筆會員資料:
情況一:有填姓名
新增資料:會員 ID = U003, 會員姓名 = "Frank"資料庫檢查:會員姓名有值 ✓ → 允許新增
情況二:沒填姓名
新增資料:會員 ID = U003, 會員姓名 = NULL資料庫檢查:會員姓名是 NULL ✗ → 拒絕新增
資料庫會回報錯誤:「會員姓名欄位設定了 NOT NULL 限制,不能是空值,這筆資料不能存進來。」
這樣就能自動確保每個會員都有姓名,不用擔心有人漏填。
NULL 和 NOT NULL 是不同層級的概念
你可能會覺得 NULL 和 NOT NULL 看起來很像,只是一個有「NOT」一個沒有。但其實它們是完全不同層級的東西。
NULL 是儲存格裡的「值」
NULL 是資料庫儲存格(cell)裡的一種值,代表「沒有資料」。
| 會員 ID | 會員姓名 | 配偶 |
|---|---|---|
| U001 | David | Emily |
| U002 | Frank | NULL |
在這個表格裡,Frank 的「配偶」欄位填的是 NULL,表示他沒有配偶。
NULL 是「資料」的一種,跟 “David”、”Emily” 一樣,都是儲存格裡的值。
NOT NULL 是欄位的「限制」
NOT NULL 不是一種值,而是對欄位設定的一種限制。
它是在告訴資料庫:「這個欄位不能出現 NULL 這個值。」
| 會員 ID | 會員姓名(NOT NULL) | 配偶 |
|---|---|---|
| U001 | David | Emily |
| U002 | Frank | NULL |
在這個表格裡:
- 「會員姓名」欄位有 NOT NULL 限制,所以不能填 NULL
- 「配偶」欄位沒有 NOT NULL 限制,所以可以填 NULL
NULL 和 NOT NULL 的比較
| NULL | NOT NULL | |
|---|---|---|
| 是什麼 | 儲存格裡的值 | 欄位的限制 |
| 層級 | 資料層級 | 欄位定義層級 |
| 意義 | 「這格沒有資料」 | 「這個欄位不能是空的」 |
| 設定時機 | 新增或修改資料時 | 設計表單結構時 |
簡單來說:
- NULL 是你在填資料時可以填的一種「值」
- NOT NULL 是你在設計表單時可以加的一種「規則」
NOT NULL 重點整理
這篇文章介紹了 NOT NULL 限制的概念:
- 用途:確保某個欄位一定要有值,不能是空的
- 效果:資料庫會自動檢查,如果欄位是 NULL 就拒絕新增
- 不要濫用:不是所有欄位都要 NOT NULL,只有真正必要的才設
- 考量使用者體驗:每多一個必填欄位,就是多一個填寫門檻
- 設定前先確認:跟老闆或 PM 確認哪些欄位是必填的
到目前為止,我們已經學了兩種欄位限制:
- UNIQUE:確保欄位的值不重複
- NOT NULL:確保欄位一定要有值
後續的文章會繼續介紹其他種類的限制。