Appearance
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 的表,其中 name、age 和 grade 列不能为 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);注意事项
NULL 与空字符串的区别:NULL 表示没有值,而空字符串('')表示有一个长度为 0 的字符串值。
默认值:如果列有 DEFAULT 约束,则当插入数据时不指定该列的值,会使用默认值而不是 NULL。
主键约束:主键列自动具有 NOT NULL 约束。
索引:NULL 值不会被包含在索引中,这可能会影响查询性能。
条件判断:在 WHERE 子句中,使用
IS NULL或IS NOT NULL来判断列是否为 NULL,而不是使用= NULL或<> NULL。
小结
SQL NOT NULL 约束是一种基本约束,用于确保列不能为 NULL 值。通过使用 NOT NULL 约束,可以确保数据库表中的重要数据始终存在,提高数据的完整性和一致性。NOT NULL 约束可以在创建表时添加,也可以在表创建后通过 ALTER TABLE 语句添加。