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値が含まれている場合はエラーが発生します。