SQL NOT NULL 约束

SQL NOT NULL 约束

在表中,默认情况下,列通常可以接受 NULL 值。然而,如果你希望确保某个列不包含 NULL 值,你需要在该列上添加 NOT NULL 约束/条件。

SQL 中的 NOT NULL

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

通常情况下,如果我们在插入数据时没有为特定列提供值,那么默认情况下会被视为 NULL 值。但是,如果我们在某个列上添加了 NOT NULL 约束,那么在插入数据时必须提供相应列的值,否则操作将失败并显示错误信息。

语法

以下是在创建表时使用 NOT NULL 的基本语法 –

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

在表上创建 NOT NULL 约束

要在表的列上添加 NOT NULL 约束,只需要在列定义的数据类型后面添加关键字 “NOT NULL”。

示例

首先,让我们使用以下查询语句创建一个名为“ CUSTOMERS ”的表。

SQL>  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)
);

让我们使用以下查询语句向上面创建的表中插入一些值 –

SQL>  INSERT INTO CUSTOMERS (ID, NAME, AGE, ADDRESS, SALARY) VALUES(1, 'Ramesh', '32', 'Ahmedabad', 2000);
INSERT INTO CUSTOMERS (ID, NAME, AGE, ADDRESS, SALARY) VALUES(2, 'Khilan', '25', 'Delhi', 1500);
INSERT INTO CUSTOMERS (ID, NAME, AGE, ADDRESS, SALARY) VALUES(3, 'kaushik', '23', 'Kota', 2500);
INSERT INTO CUSTOMERS (ID, NAME, AGE, ADDRESS, SALARY) VALUES(4, 'Chaitali', '25', 'Mumbai', 6500);
INSERT INTO CUSTOMERS (ID, NAME, AGE, ADDRESS, SALARY) VALUES(5, 'Hardik','27', 'Bhopal', 8500);
INSERT INTO CUSTOMERS (ID, NAME, AGE, ADDRESS, SALARY) VALUES(6, 'Komal', '22', 'MP', 9000);
INSERT INTO CUSTOMERS (ID, NAME, AGE, ADDRESS, SALARY) VALUES(7, 'Muffy', '24', 'Indore', 5500);

下面将创建如下所示的表格−

+-----+-----------+-------+--------------+------------+
| ID  | NAME      | AGE   | ADDRESS      | SALARY     |
+-----+-----------+-------+--------------+------------+
|1    | Ramesh    | 32    | Ahmedabad    | 2000.00    |
|2    | Khilan    | 25    | Delhi        | 1500.00    |
|3    | kaushik   | 23    | Kota         | 2500.00    |
|4    | Chaitali  | 25    | Mumbai       | 6500.00    |
|5    | Hardik    | 27    | Bhopal       | 8500.00    |
|6    | Komal     | 22    | MP           | 9000.00    |
|7    | Muffy     | 24    | Indore       | 5500.00    |
+-----+-----------+-------+--------------+------------+

验证

在SQL中没有特定的查询来显示表的结构。为了做到这一点,我们使用SQL Server中的“sp_help”存储过程来返回关于指定对象的信息,包括列、约束和索引。

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

SQL> EXEC sp_help 'CUSTOMERS';

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

注意 −上述查询显示了许多包含有关“CUSTOMERS”表的详细信息的表。有关NOT NULL约束的信息,我们仅显示了一个表。

+-------------+----------+----------+
| Column_name | Type     | Nullable |
+-------------+----------+----------+
| ID          | int      | no       |
| NAME        | varchar  | no       |
| AGE         | int      | no       |
| ADDRESS     | char     | yes      |
| SALARY      | decimal  | yes      |
+-------------+----------+----------+

从表中删除NOT NULL约束

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

将列的NOT NULL约束删除的一种方式是将其更改为NULL。

语法

以下是SQL中ALTER TABLE语句的语法:

ALTER TABLE table_name
ALTER COLUMN column_name datatype NULL;

在这里,

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

示例

以下查询试图修改上面创建的CUSTOMERS表的 NAME 列上的约束为NULL –

SQL> ALTER TABLE CUSTOMERS ALTER COLUMN NAME VARCHAR(20) NULL;

输出

在执行给定程序时,输出如下所示:

Commands completed successfully.

验证

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

SQL> EXEC sp_help 'CUSTOMERS';

正如我们在下面的输出中所看到的,”NAME” 列已被修改为可为空,这意味着该列允许存在 NULL 值。

+-------------+----------+----------+
| Column_name | Type     | Nullable |
+-------------+----------+----------+
| ID          | int      | no       |
| NAME        | varchar  | yes      |
| AGE         | int      | no       |
| ADDRESS     | char     | yes      |
| SALARY      | decimal  | yes      |
+-------------+----------+----------+

在现有表中添加NOT NULL约束

在前面的部分中,我们通过使用ALTER TABLE语句改变列的定义来删除了NOT NULL约束。

同样地,使用ALTER TABLE语句可以在现有表中的列上添加NOT NULL约束。

语法

以下是SQL中使用ALTER TABLE语句向现有列添加NOT NULL约束的语法:

ALTER TABLE table_name
ALTER COLUMN column_name datatype NOT NULL;

示例

假设之前创建了表 CUSTOMERS ,让我们尝试使用以下查询来修改 ADDRESS 列,使其 不允许 空值。

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

输出

当我们执行上面的程序时,输出结果如下所示:

Commands completed successfully.

验证

如果通过调用 sp_help 过程显示CUSTOMERS表的结构,您会发现地址列上的NULL约束已被删除(修改为NULL)−

SQL> EXEC sp_help 'CUSTOMERS';

如下所示,输出结果中可以看到,”ADDRESS” 列被修改,这意味着该列不允许出现空值 (NOT)

+-------------+----------+----------+
| Column_name | Type     | Nullable |
+-------------+----------+----------+
| ID          | int      | no       |
| NAME        | varchar  | yes      |
| AGE         | int      | no       |
| ADDRESS     | char     | no       |
| SALARY      | decimal  | yes      |
+-------------+----------+----------+

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程