NOT NULL制約(カラムにNULLの格納を許可するかどうか)

テーブルを作成する時にカラムに対して NOT NULL 制約をつけると、カラムに NULL を格納することができなくなります。ここでは PostgreSQL における NOT NULL 制約の使い方について解説します。

(Last modified: )

NOT NULL制約の使い方

テーブルを作成するとき、カラムに対して NOT NULL 制約を設定すると、カラムに NULL を格納できなくすることができます。書式は次のとおりです。

CREATE TABLE [ IF NOT EXISTS ] table_name (
  column_name data_type [NOT NULL] [NULL] [, ... ]
)

カラムに対して NOT NULL または NULL を指定します。 NOT NULL を指定されたカラムには値として NULL を格納することができます。逆に NULL を指定した場合には値として NULL を格納することができます。特に指定しなかった場合は NULL が指定されたものと見なされますので NULL を明示的に指定する必要はありません。

-- --

それでは実際に試してみます。 mydb データベースの myschema スキーマの中に次のようなテーブルを作成しました。

create table myschema.friends (
  id integer not null, 
  name varchar(10) null
);

NOT NULL制約の使い方(1)

psql メタコマンドの \d コマンドを使って作成したテーブルのカラムの情報を取得してみます。

\d myschema.friends

NOT NULL制約の使い方(2)

id カラムの「Null 値を許容」の列の値に not null と表示されています。

それでは myschema.friends テーブルにデータを追加します。最初に id カラムと name カラムの値がどちらも NULL でないデータを追加します。

insert into myschema.friends values (1, 'Yamada');

NOT NULL制約の使い方(3)

正常にデータを追加することができました。

次に id カラムが NULL のデータを追加します。

insert into myschema.friends values (NULL, 'Suzuki');

NOT NULL制約の使い方(4)

id カラムには NOT NULL 制約が設定されていますので、 NULL の値を格納しようとすると ERROR: 列"id"内のNULL値はNOT NULL制約違反です というエラーが発生しデータの追加に失敗します。

最後に name カラムが NULL のデータを追加します。

insert into myschema.friends values (3, NULL);

NOT NULL制約の使い方(5)

name カラムには NULL 制約が設定されているので NULL の値を格納することができるため問題なくデータを追加することができました。今回は明示的に NULL 制約を設定してみましたが、明示的に指定しない場合は NULL 制約を設定したものと同じなので、 NOT NULL が指定されていないカラムには NULL を格納することができます。

-- --

NOT NULL 制約の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。