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 制約が設定されているカラムでも値を指定した場合には指定した値がカラムに格納されます。
insert into product values(1, 'PC', 75000);
insert into product values(4, 'Desk', 18000);
次に DEFAULT 制約が設定されている name カラムの値を指定せずにデータを追加すると、カラムにはデフォルト値である no name が格納されます。
insert into product(id, price) values(6, 18000);
同じく DEFAULT 制約が設定されている price カラムの値を指定せずにデータを追加すると、カラムにはデフォルト値である 0 が格納されます。
insert into product(id, name) values(8, 'Chair');
このように 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 制約が設定されている ts カラムの値は省略してデータをいくつか追加してみます。
insert into user(id, name) values(1, 'Yamada');
insert into user(id, name) values(3, 'Itou');
テーブルからデータを取得します。
select * from user;
DEFAULT 制約を設定した ts カラムに、データを追加した時の日付と時刻が格納されていることが確認できます。
-- --
SQLite における DEFAULT 制約の使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。