DEFAULT制約(デフォルト値を設定する)

テーブルを作成する時にカラムに対して DEFAULT 制約をつけると、カラムにデフォルト値を設定することができます。テーブルにデータを追加するとき、カラムに値を指定しなかった場合にはデフォルト値が代わりに格納されます。ここでは PostgreSQL における DEFAULT 制約の使い方について解説します。

(Last modified: )

DEFAULT制約の使い方

テーブルを作成するとき、カラムに対して DEFAULT 制約を設定すると、カラムにデフォルト値を設定することができます。書式は次のとおりです。

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

カラムに対して DEFAULT デフォルト値 を指定します。データを追加する時、対象にカラムに値が指定されていなかった場合にデフォルト値が格納されます。カラムに DEFAULT 制約が設定されていなかった場合は NULL が可能されます。

デフォルトの値として設定できるのは定数の他に式が可能です(公式のマニュアルでは無変数式が設定できると記載されていました)。

-- --

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

create table myschema.friends (
  id integer default 0, 
  name varchar(10) default 'Unknown'
);

DEFAULT制約の使い方(1)

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

\d myschema.friends

DEFAULT制約の使い方(2)

「デフォルト」の列の値に id カラムは 0 、 name カラムは 'Unknown'::character varying と表示されています。

それでは最初に id カラムおよび name カラムの両方に値を指定してデータを追加してみます。

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

DEFAULT制約の使い方(3)

カラムに値を指定してデータを追加した場合はデフォルト値は関係ない指定した値が格納されます。

次に id カラムだけに値を指定してデータを追加してみます。

insert into myschema.friends (id) values (2);

DEFAULT制約の使い方(4)

データを追加するときに name カラムに値を指定していないので、デフォルト値として設定した 'Unknown' が格納されています。

最後 name カラムだけに値を指定してデータを追加してみます。

insert into myschema.friends (name) values ('Suzuki');

DEFAULT制約の使い方(5)

データを追加するときに id カラムに値を指定していないので、デフォルト値として設定した 0 が格納されています。

このようにカラムに DEFAULT 制約を設定しておくことで、データを追加する時にそのカラムに値が指定されていなかった場合に NULL ではなく指定したデフォルト値が代わりに格納されるようにすることができます。

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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