SQL Not Null
SQL NOT NULL 约束
Section titled “SQL NOT NULL 约束”默认情况下,数据库表中的列可以包含 NULL 值。NULL 值表示数据的缺失,它不同于空字符串或零。
SQL NOT NULL 约束
Section titled “SQL NOT NULL 约束”NOT NULL 约束强制规定列不能接受 NULL 值。这意味着表中的每一行都必须为该列提供一个值。
当 NOT NULL 约束应用于某个列时,如果插入新记录或更新现有记录会导致该列出现 NULL 值,则操作将失败。这通过要求某些字段始终包含值来确保数据完整性。
在表创建时定义 NOT NULL
Section titled “在表创建时定义 NOT 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 值。
为现有列添加 NOT NULL 约束
Section titled “为现有列添加 NOT NULL 约束”如果表已经存在,您可以使用 ALTER TABLE 语句为列添加 NOT NULL 约束。具体语法在不同的数据库系统之间可能略有差异。
SQL Server / Oracle / MySQL (使用 MODIFY) / PostgreSQL:
Section titled “SQL Server / Oracle / MySQL (使用 MODIFY) / PostgreSQL:”ALTER TABLE PersonsMODIFY 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 约束
Section titled “移除 NOT NULL 约束”要移除 NOT NULL 约束,您同样使用 ALTER TABLE,这将允许该列接受 NULL 值。
SQL Server / Oracle / MySQL (使用 MODIFY) / PostgreSQL:
Section titled “SQL Server / Oracle / MySQL (使用 MODIFY) / PostgreSQL:”ALTER TABLE PersonsMODIFY 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;为什么要使用 NOT NULL?
Section titled “为什么要使用 NOT NULL?”强制性数据:确保关键信息始终存在(例如,用户必须有电子邮件,订单必须有订单日期)。
数据完整性:防止数据丢失导致错误或分析不准确。
简化查询:如果数据保证存在,则无需在查询中显式处理 NULL(例如,WHERE ColumnName IS NOT NULL)。
然而,应谨慎使用 NOT NULL。如果某个信息确实是可选的,那么该列应该允许 NULL 值。