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