Skip to content

SQL NOT NULL

SQL NOT NULL 约束用于确保列不能为 NULL 值。NULL 值表示没有值或未知值,NOT NULL 约束确保列必须始终包含一个值。

语法

创建表时添加 NOT NULL 约束

sql
CREATE TABLE table_name (
    column1 datatype NOT NULL,
    column2 datatype NOT NULL,
    ...
);

表创建后添加 NOT NULL 约束

sql
ALTER TABLE table_name
MODIFY column_name datatype NOT NULL;

移除 NOT NULL 约束

sql
ALTER TABLE table_name
MODIFY column_name datatype;

示例

示例 1:创建表时添加 NOT NULL 约束

sql
CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT NOT NULL,
    grade VARCHAR(20) NOT NULL,
    gender VARCHAR(10)  -- 可以为 NULL
);

执行结果:创建一个名为 students 的表,其中 nameagegrade 列不能为 NULL,而 gender 列可以为 NULL。

示例 2:向 NOT NULL 列插入数据

sql
-- 成功插入数据(所有 NOT NULL 列都提供了值)
INSERT INTO students (name, age, grade, gender)
VALUES ('张三', 18, '高三', '男');

-- 成功插入数据(gender 列可以为 NULL)
INSERT INTO students (name, age, grade)
VALUES ('李四', 17, '高二');

-- 失败插入数据(name 列没有提供值)
INSERT INTO students (age, grade, gender)
VALUES (16, '高一', '女');

示例 3:表创建后添加 NOT NULL 约束

sql
-- 创建表
CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    age INT,
    grade VARCHAR(20)
);

-- 添加 NOT NULL 约束到 name 列
ALTER TABLE students
MODIFY name VARCHAR(50) NOT NULL;

-- 添加 NOT NULL 约束到 age 列
ALTER TABLE students
MODIFY age INT NOT NULL;

示例 4:移除 NOT NULL 约束

sql
-- 移除 name 列的 NOT NULL 约束
ALTER TABLE students
MODIFY name VARCHAR(50);

注意事项

  1. NULL 与空字符串的区别:NULL 表示没有值,而空字符串('')表示有一个长度为 0 的字符串值。

  2. 默认值:如果列有 DEFAULT 约束,则当插入数据时不指定该列的值,会使用默认值而不是 NULL。

  3. 主键约束:主键列自动具有 NOT NULL 约束。

  4. 索引:NULL 值不会被包含在索引中,这可能会影响查询性能。

  5. 条件判断:在 WHERE 子句中,使用 IS NULLIS NOT NULL 来判断列是否为 NULL,而不是使用 = NULL<> NULL

小结

SQL NOT NULL 约束是一种基本约束,用于确保列不能为 NULL 值。通过使用 NOT NULL 约束,可以确保数据库表中的重要数据始终存在,提高数据的完整性和一致性。NOT NULL 约束可以在创建表时添加,也可以在表创建后通过 ALTER TABLE 语句添加。