SQL - NOT NULL 约束


在表中,默认情况下列通常可以接受 NULL 值。但是,如果要确保特定列不包含 NULL 值,则需要在该列上添加 NOT NULL 约束/条件。

SQL NOT NULL 约束

SQL 中的NOT NULL约束用于确保表中的列不包含 NULL(空)值,并防止任何尝试插入或更新具有 NULL 值的行。

通常,如果我们在向表中插入数据时没有为特定列提供值,则默认情况下它将被视为 NULL 值。但是,如果我们在列上添加 NOT NULL 约束,它将强制在数据插入期间必须为该列提供值,并且尝试插入 NULL 值将导致违反约束错误。

句法

以下是创建表时NOT NULL约束的基本语法-

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

在表上创建 NOT NULL 约束

要对表的某列添加 NOT NULL 约束,我们只需在列定义中该列的数据类型后面添加关键字“NOT NULL”即可。

例子

首先,让我们使用以下查询创建一个名为CUSTOMERS的表 -

CREATE TABLE CUSTOMERS(
   ID INT             NOT NULL,
   NAME VARCHAR (20)  NOT NULL,
   AGE  INT           NOT NULL,
   ADDRESS CHAR (25) ,
   SALARY DECIMAL (20, 2),       
   PRIMARY KEY (ID)
);

让我们使用以下 INSERT 查询将一些值插入到上面创建的表中 -

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', '32', 'Ahmedabad', 2000),
(2, 'Khilan', '25', 'Delhi', 1500),
(3, 'Kaushik', '23', 'Kota', 2500),
(4, 'Chaitali', '25', 'Mumbai', 6500),
(5, 'Hardik','27', 'Bhopal', 8500),
(6, 'Komal', '22', 'Hyderabad', 9000),
(7, 'Muffy', '24', 'Indore', 5500);

该表将创建如下所示 -

ID 姓名 年龄 地址 薪水
1 拉梅什 32 艾哈迈达巴德 2000.00
2 基兰 25 德里 1500.00
3 考希克 23 科塔 2000.00
4 柴塔利 25 孟买 6500.00
5 哈迪克 27 博帕尔 8500.00
6 科马尔 22 海得拉巴 4500.00
7 莫菲 24 印多尔 10000.00

确认

要显示 MySQL 数据库中表的结构,我们使用DESCRIBE命令。DESCRIBE 命令提供表的列、数据类型和各种属性的摘要,如下所示 -

DESCRIBE CUSTOMERS;

正如我们在下面的输出中看到的,该表显示了有关表的列名、列类型以及是否可为空的信息。

场地 类型 无效的 钥匙 默认 额外的
ID 整数 优先原则 无效的
姓名 varchar(20) 无效的
年龄 整数 无效的
地址 字符(25) 是的 无效的
薪水 小数(20,2) 是的 无效的

从表中删除 NOT NULL 约束

在 SQL 中,要删除现有表中列的 NOT NULL 约束,我们需要使用ALTER TABLE语句。使用此语句,我们可以修改列的定义,即可以更改现有列的名称、数据类型或约束。

删除列上的 NOT NULL 约束的方法之一是将其更改为 NULL。

句法

以下是从 MySQL 数据库的表中删除非空约束的语法 -

ALTER TABLE table_name
MODIFY COLUMN column_name datatype NULL;

是,

  • table_name是包含我们要修改的列的表的名称。
  • column_name是具有要删除的 NOT NULL 约束的列的名称。
  • datatype是列的数据类型。

例子

以下是将MySQL 数据库中 CUSTOMERS 表的NAME列的约束修改为 NULL 的查询-

ALTER TABLE CUSTOMERS MODIFY COLUMN NAME VARCHAR(20) NULL;

输出

执行上述查询时,输出显示如下 -

Query OK, 0 rows affected (0.10 sec)
Records: 0  Duplicates: 0  Warnings: 0

确认

现在,让我们使用以下查询显示名为“CUSTOMERS”的表的结构 -

DESCRIBE CUSTOMERS;

如下表所示,“NAME”列被修改为可为空,这意味着该列中允许有 NULL 值。

场地 类型 无效的 钥匙 默认 额外的
ID 整数 优先原则 无效的
姓名 varchar(20) 是的 无效的
年龄 整数 无效的
地址 字符(25) 是的 无效的
薪水 小数(20,2) 是的 无效的

向现有表添加 NOT NULL 约束

在上一节中,我们通过使用 ALTER TABLE 语句更改列的定义,删除了列上的 NOT NULL 约束。类似地,我们可以使用 ALTER TABLE 语句向现有表中的列添加 NOT NULL 约束。

句法

以下是将 NOT NULL 约束添加到 MySQL 数据库中现有列的 SQL 语法 -

ALTER TABLE table_name
MODIFY COLUMN column_name datatype NOT NULL;

例子

假设之前创建的表CUSTOMERS并让我们修改ADDRESS列,确保它不允许使用以下查询为空值 -

ALTER TABLE CUSTOMERS MODIFY COLUMN ADDRESS CHAR(25) NOT NULL;

输出

当我们执行上述查询时,获得的输出如下 -

Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

确认

我们可以使用以下查询显示 CUSTOMERS 表的结构 -

DESCRIBE CUSTOMERS;

正如我们在下面的输出中看到的,“ADDRESS”列被修改,这意味着该列中不允许有NULL 值。

场地 类型 无效的 钥匙 默认 额外的
ID 整数 优先原则 无效的
姓名 varchar(20) 无效的
年龄 整数 无效的
地址 字符(25) 无效的
薪水 小数(20,2) 是的 无效的