預設情況下,資料表欄位允許儲存 NULL 值,代表「未知」或「缺少資料」。NOT NULL 約束則強制該欄位必須包含實際值,插入或更新資料時若未提供該欄位值,作業將會失敗。
當欄位定義為 NOT NULL 時,資料庫引擎會在寫入操作前檢查該欄位是否有值。若為 NULL,即拋出錯誤並回滾交易。這項機制適用於 INSERT、UPDATE 等所有修改資料的指令。
以下範例建立 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。
若資料表已存在且欄位原本允許 NULL,欲改為 NOT NULL 需先確認現有資料無 NULL 值,否則會報錯。語法範例(以 MySQL 為例):
ALTER TABLE Persons MODIFY COLUMN FirstName varchar(255) NOT NULL;
注意:不同資料庫修改欄位屬性的語法不同,SQL Server 使用 ALTER COLUMN,Oracle 使用 MODIFY,請參考對應文件。
Email、Phone、訂單的 OrderDate 等。NOT NULL ≠ 預設值。若欄位設為 NOT NULL 但未給 DEFAULT,插入資料時必須明確提供該欄位值;若搭配 DEFAULT 使用,則可在未指定值時自動填入預設值。