Skip to content

SQL Not Null

默认情况下,数据库表中的列可以包含 NULL 值。NULL 值表示数据的缺失,它不同于空字符串或零。

NOT NULL 约束强制规定列不能接受 NULL 值。这意味着表中的每一行都必须为该列提供一个值。

当 NOT NULL 约束应用于某个列时,如果插入新记录或更新现有记录会导致该列出现 NULL 值,则操作将失败。这通过要求某些字段始终包含值来确保数据完整性。

以下 SQL 语句创建一个 Persons 表,其中 ID 和 LastName 列被强制规定不接受 NULL 值:

CREATE TABLE Persons (
ID INT NOT NULL,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255)
);

在此示例中,FirstName、Address 和 City 仍然可以接受 NULL 值。

如果表已经存在,您可以使用 ALTER TABLE 语句为列添加 NOT NULL 约束。具体语法在不同的数据库系统之间可能略有差异。

SQL Server / Oracle / MySQL (使用 MODIFY) / PostgreSQL:

Section titled “SQL Server / Oracle / MySQL (使用 MODIFY) / PostgreSQL:”
ALTER TABLE Persons
MODIFY COLUMN FirstName VARCHAR(255) NOT NULL; -- MySQL 语法
-- SQL Server 语法:
-- ALTER TABLE Persons
-- ALTER COLUMN FirstName VARCHAR(255) NOT NULL;
-- Oracle 语法:
-- ALTER TABLE Persons
-- MODIFY FirstName VARCHAR(255) NOT NULL;
-- PostgreSQL 语法:
-- ALTER TABLE Persons
-- ALTER COLUMN FirstName SET NOT NULL;

重要提示:如果该列已经包含 NULL 值,尝试添加 NOT NULL 约束将导致错误。在应用约束之前,您必须首先将该列中的任何 NULL 值更新为非 NULL 值,或删除包含 NULL 值的行。

要移除 NOT NULL 约束,您同样使用 ALTER TABLE,这将允许该列接受 NULL 值。

SQL Server / Oracle / MySQL (使用 MODIFY) / PostgreSQL:

Section titled “SQL Server / Oracle / MySQL (使用 MODIFY) / PostgreSQL:”
ALTER TABLE Persons
MODIFY COLUMN FirstName VARCHAR(255) NULL; -- MySQL 语法 (NULL 通常是默认值)
-- SQL Server 语法:
-- ALTER TABLE Persons
-- ALTER COLUMN FirstName VARCHAR(255) NULL;
-- Oracle 语法:
-- ALTER TABLE Persons
-- MODIFY FirstName VARCHAR(255) NULL;
-- PostgreSQL 语法:
-- ALTER TABLE Persons
-- ALTER COLUMN FirstName DROP NOT NULL;

强制性数据:确保关键信息始终存在(例如,用户必须有电子邮件,订单必须有订单日期)。

数据完整性:防止数据丢失导致错误或分析不准确。

简化查询:如果数据保证存在,则无需在查询中显式处理 NULL(例如,WHERE ColumnName IS NOT NULL)。

然而,应谨慎使用 NOT NULL。如果某个信息确实是可选的,那么该列应该允许 NULL 值。