---
title: "NOT NULL 完整性约束 | OceanBase 文档中心"
description: NOT NULL 完整性约束 在 OceanBase 数据库中，NOT NULL 约束可用于限制一个列中不能包含 NULL 值。 在 OceanBase 数据库 V3.1.X 版本之前， NOT NULL 可以视作列的属性，仅能在建表时通过以下方式指定，并且建表后不支持将 NULLABLE 的列改为 NOT NULL…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.2.3 企业版 LTS

# NOT NULL 完整性约束

更新时间：2023-07-18 17:25:58

在 OceanBase 数据库中，NOT NULL 约束可用于限制一个列中不能包含 NULL 值。

在 OceanBase 数据库 V3.1.X 版本之前，`NOT NULL` 可以视作列的属性，仅能在建表时通过以下方式指定，并且建表后不支持将 `NULLABLE` 的列改为 `NOT NULL`。

```sql
CREATE TABLE employee(
id NUMBER NOT NULL,
name VARCHAR(100) NOT NULL,
mgr_id NUMBER);

```

从 V3.1.X 版本开始，OceanBase 数据库真正地支持了 `NOT NULL` 约束，主要特性如下：

- 建表时可以指定约束名以及约束状态。用户如果没有为 `NOT NULL` 约束指定名字，数据库会利用系统当前时间自动生成约束名。状态包括`RELY`/`NORELY`、`ENABLE`/`DISABLE` 和 `VALIDATE`/`NOVALIDATE`。 建表时如果不为 `NOT NULL` 约束指定状态，默认为 `NORELY ENABLE VALIDATE`。

     - `RELY` 表示数据库可以将该列视作不含 `NULL` 值，以执行计划优化等。
     - `ENABLE` 表示不能向该列中插入 `NULL` 值。
     - `VALIDATE` 表示该列的现有数据中不包含 `NULL` 值。

  ```sql
  CREATE TABLE employee(
  id NUMBER CONSTRAINT ID_NOT_NULL NOT NULL NORELY ENABLE VALIDATE,
  name VARCHAR(100) CONSTRAINT NAME_NOT_NULL NOT NULL,
  mgr_id NUMBER);

  ```
 - 可以在系统视图 `ALL_CONSTRAINTS` 中查到 `NOT NULL` 约束，约束类型为 'C'，也可以通过DBMS_METADATA.GET_DDL 获取 `NOT NULL` 约束的信息。

  ```sql
  SELECT * FROM ALL_CONSTRAINTS WHERE TABLE_NAME = 'employee';
  SELECT DBMS_METADATA.GET_DDL('CONSTRAINT', 'ID_NOT_NULL') FROM DUAL;

  ```
 - 可以通过 `ALTER TABLE` 语句添加或删除 `NOT NULL` 约束，也支持修改 `NOT NULL` 约束的状态。如果希望向 `id` 列中插入 `NULL` 值，可以执行下面的语句将约束 `ID_NOT_NULL` 的状态改为 `DISABLE` 或直接删除约束。

  ```sql
  ALTER TABLE employee MODIFY CONSTRAINT ID_NOT_NULL DISABLE;
  ALTER TABLE employee DROP CONSTRAINT ID_NOT_NULL;

  ```

  如果希望禁止向 `mgr_id` 列中插入 `NULL` 值，可以执行下面的语句在 `mgr_id` 列上添加一个 `NOT NULL` 约束。

  ```sql
  ALTER TABLE employee MODIFY mgr_id NOT NULL;

  ```

  执行上述语句修改 `mgr_id` 列为 `not null` 时，会检查已有数据是否含 `NULL` 值，如果包含 `NULL` 值会报错。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
