首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> SQL 基礎

SQL NOT NULL 約束詳解:強制欄位不可為空值

     編輯:SQL 基礎

SQL NOT NULL 約束詳解


預設情況下,資料表欄位允許儲存 NULL 值,代表「未知」或「缺少資料」。NOT NULL 約束則強制該欄位必須包含實際值,插入或更新資料時若未提供該欄位值,作業將會失敗。


NOT NULL 約束的運作機制

當欄位定義為 NOT NULL 時,資料庫引擎會在寫入操作前檢查該欄位是否有值。若為 NULL,即拋出錯誤並回滾交易。這項機制適用於 INSERT、UPDATE 等所有修改資料的指令。

建立資料表時套用 NOT NULL

以下範例建立 Persons 表,強制 P_Id 與 LastName 不得為空:

CREATE TABLE Persons (
  P_Id int NOT NULL,
  LastName varchar(255) NOT NULL,
  FirstName varchar(255),
  Address varchar(255),
  City varchar(255)
);

FirstName、Address、City 未加 NOT NULL,因此允許 NULL。


修改既有資料表欄位為 NOT NULL

若資料表已存在且欄位原本允許 NULL,欲改為 NOT NULL 需先確認現有資料無 NULL 值,否則會報錯。語法範例(以 MySQL 為例):

ALTER TABLE Persons
MODIFY COLUMN FirstName varchar(255) NOT NULL;

注意:不同資料庫修改欄位屬性的語法不同,SQL Server 使用 ALTER COLUMN,Oracle 使用 MODIFY,請參考對應文件。


實務應用場景

  • 主鍵欄位:主鍵天生包含 NOT NULL 特性。
  • 業務必要欄位:如會員系統的 Email、Phone、訂單的 OrderDate 等。
  • 外鍵參考欄位:參考其他表主鍵的欄位通常不應為 NULL,以維持參考完整性。

常見誤區

NOT NULL ≠ 預設值。若欄位設為 NOT NULL 但未給 DEFAULT,插入資料時必須明確提供該欄位值;若搭配 DEFAULT 使用,則可在未指定值時自動填入預設值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved