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 );
psql メタコマンドの \d コマンドを使って作成したテーブルのカラムの情報を取得してみます。
\d myschema.friends
id カラムの「Null 値を許容」の列の値に not null と表示されています。
それでは myschema.friends テーブルにデータを追加します。最初に id カラムと name カラムの値がどちらも NULL でないデータを追加します。
insert into myschema.friends values (1, 'Yamada');
正常にデータを追加することができました。
次に id カラムが NULL のデータを追加します。
insert into myschema.friends values (NULL, 'Suzuki');
id カラムには NOT NULL 制約が設定されていますので、 NULL の値を格納しようとすると ERROR: 列"id"内のNULL値はNOT NULL制約違反です というエラーが発生しデータの追加に失敗します。
最後に name カラムが NULL のデータを追加します。
insert into myschema.friends values (3, NULL);
name カラムには NULL 制約が設定されているので NULL の値を格納することができるため問題なくデータを追加することができました。今回は明示的に NULL 制約を設定してみましたが、明示的に指定しない場合は NULL 制約を設定したものと同じなので、 NOT NULL が指定されていないカラムには NULL を格納することができます。
-- --
NOT NULL 制約の使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。