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 |
+-------------+----------+----------+