基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
NOT NULL 完整性约束
更新时间:2023-07-18 17:25:58
在 OceanBase 数据库中,NOT NULL 约束可用于限制一个列中不能包含 NULL 值。
在 OceanBase 数据库 V3.1.X 版本之前,NOT NULL 可以视作列的属性,仅能在建表时通过以下方式指定,并且建表后不支持将 NULLABLE 的列改为 NOT NULL。
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值。
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约束的信息。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或直接删除约束。ALTER TABLE employee MODIFY CONSTRAINT ID_NOT_NULL DISABLE; ALTER TABLE employee DROP CONSTRAINT ID_NOT_NULL;如果希望禁止向
mgr_id列中插入NULL值,可以执行下面的语句在mgr_id列上添加一个NOT NULL约束。ALTER TABLE employee MODIFY mgr_id NOT NULL;执行上述语句修改
mgr_id列为not null时,会检查已有数据是否含NULL值,如果包含NULL值会报错。