摘要:在本教程中,您將學習如何使用 SQL NOT NULL 約束來確保列不能有 NULL 值。
SQL NOT NULL 約束簡介 #
在 SQL 中,NULL 表示未知值或缺失資料。如果您在定義表列時未使用任何約束,該列將預設接受 NULL 值。
為確保列不能有 NULL 值,您可以使用 NOT NULL 約束。
NOT NULL 約束防止向指定列插入或更新 NULL 值。這對於定義那些絕不應為 NULL 的重要列很有幫助。
要將 NOT NULL 約束應用於列,您可以使用以下語法:
column_name datatype NOT NULLCode language: SQL (Structured Query Language) (sql)例如,下面的語句建立了一個名為 candidates 的表來儲存候選人資訊:
CREATE TABLE candidates (
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
email VARCHAR(512) NOT NULL,
phone VARCHAR(25) NOT NULL
);Code language: SQL (Structured Query Language) (sql)candidates 表包含四個帶有 NOT NULL 約束的列。這意味著您不能向這些列中的任何一列插入 NULL 值。
以下語句將失敗,因為它試圖向 email 和 phone 列插入 NULL 值:
INSERT INTO
candidates (first_name, last_name, email, phone)
VALUES
('John', 'Doe', NULL, NULL);Code language: SQL (Structured Query Language) (sql)然而,下面的 insert 語句會成功,因為它為所有 NOT NULL 列提供了有效值:
INSERT INTO
candidates (first_name, last_name, email, phone)
VALUES
(
'John',
'Doe',
'[email protected]',
'(408)-111-2222'
);Code language: SQL (Structured Query Language) (sql)為現有列新增 NOT NULL 約束 #
通常,您在建立表時為列新增 NOT NULL 約束。但有時,您可能想為現有的可為空(nullable)的列應用 NOT NULL 約束。
為此,您需要遵循以下步驟:
首先,使用 UPDATE 語句將 NULL 更新為非 NULL 值:
UPDATE table_name
SET
column_name = non_null_value
WHERE
column_name IS NULL;Code language: SQL (Structured Query Language) (sql)請注意,我們在 WHERE 子句中使用了 IS NULL 運算子來查詢 column_name 列中值為 NULL 的行。
其次,使用 ALTER TABLE 語句向列新增 NOT NULL 約束:
ALTER TABLE table_name
MODIFY column_name data_type NOT NULL;Code language: SQL (Structured Query Language) (sql)以下示例展示瞭如何為現有列新增 NOT NULL 約束。
首先,建立一個名為 interviews 的表來儲存面試資訊:
CREATE TABLE interviews (
candidate_id INT NOT NULL,
hiring_manager VARCHAR(255) NOT NULL,
interview_date TIMESTAMP
);Code language: SQL (Structured Query Language) (sql)其次,向 interview_date 列新增 NOT NULL 約束:
ALTER TABLE interviews
MODIFY interview_date TIMESTAMP NOT NULL;Code language: SQL (Structured Query Language) (sql)摘要 #
- 使用
NOT NULL約束來確保列不能有NULL值。
資料庫 #
- PostgreSQL NOT NULL 約束
- MySQL NOT NULL 約束
- MariaDB NOT NULL 約束
- Oracle NOT NULL 約束
- Db2 NOT NULL 約束
- SQLite NOT NULL 約束
測驗 #
本教程是否有幫助?