DEFAULT制約の使い方

テーブルにデータを追加する時、値を省略したカラムには通常 NULLが 格納されますが NULL の代わりにデフォルトで格納される値を設定した場合に DEFAULT 制約を設定します。ここでは SQLite における DEFAULT 制約の使い方について解説します。

(Last modified: )

DEFAULT制約とは

カラムに DEFAULT 制約を設定すると、データを追加する時に値を省略した場合のデフォルト値を設定することができます。 DEFAULT 制約をカラムに設定する場合の書式は次の通りです。

CREATE TABLE テーブル名(カラム名 DEFAULT 値, ...);

デフォルト値には NULL 、数値、文字列が指定できます。

では実際に試してみます。次のようなテーブルを作成しました。 price カラムと name カラムにはそれぞれ DEFAULT 制約が設定されています。

create table product(id integer, name text default 'no name', price integer default 0);

DEFAULT制約とは(1)

まずいくつかのデータを追加してみます。DEFAULT 制約が設定されているカラムでも値を指定した場合には指定した値がカラムに格納されます。

insert into product values(1, 'PC', 75000);
insert into product values(4, 'Desk', 18000);

DEFAULT制約とは(2)

次に DEFAULT 制約が設定されている name カラムの値を指定せずにデータを追加すると、カラムにはデフォルト値である no name が格納されます。

insert into product(id, price) values(6, 18000);

DEFAULT制約とは(3)

同じく DEFAULT 制約が設定されている price カラムの値を指定せずにデータを追加すると、カラムにはデフォルト値である 0 が格納されます。

insert into product(id, name) values(8, 'Chair');

DEFAULT制約とは(4)

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

データを追加した日時をデフォルト値として設定する

DEFAULT 制約で指定するデフォルトの値として次の値を指定すると、データを追加した時にその時点の日付や時刻を取得してデフォルトの値としてカラムに可能することができます。

CURRENT_TIME         HH:MM:SS形式
CURRENT_DATE         YYYY-MM-DD形式
CURRENT_TIMESTAMP    YYYY-MM-DD HH:MM:SS形式

※タイムゾーンはUTCです

では実際に試してみます。次のようなテーブルを作成しました。 ts カラムに DEFAULT 制約を設定しデフォルト値として CURRENT_TIMESTAMP を指定しています。

create table user(id integer, name text, ts default CURRENT_TIMESTAMP);

DEFAULT制約とは(1)

それでは DEFAULT 制約が設定されている ts カラムの値は省略してデータをいくつか追加してみます。

insert into user(id, name) values(1, 'Yamada');
insert into user(id, name) values(3, 'Itou');

DEFAULT制約とは(2)

DEFAULT 制約を設定した ts カラムに、データを追加した時の日付と時刻が格納されていることが確認できます。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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