SQLite | テーブル | DEFAULT制約
行を追加するときにカラム値を省略すると、通常はNULLが保存されます。DEFAULT制約を使うと、代わりに既定値を保存できます。ここでは、その使い方を説明します。
DEFAULT制約とは
DEFAULT制約を設定すると、追加時にカラム値を省略した場合の既定値を指定できます。構文は次のとおりです。
CREATE TABLE テーブル名 (カラム名 DEFAULT 値, ...);
既定値にはNULL、数値、文字列を指定できます。
次のテーブルを作成します。nameとpriceにはそれぞれDEFAULT制約があります。
create table product (id integer, name text default 'no name', price integer default 0);
sqlite> create table product (id integer, name text default 'no name', price integer default 0);
sqlite>
まず、各カラムの値を明示して行を追加します。指定した値がそのまま保存されます。
insert into product values (1, 'PC', 75000);
insert into product values (4, 'Desk', 18000);
sqlite> insert into product values (1, 'PC', 75000);
sqlite> insert into product values (4, 'Desk', 18000);
sqlite>
nameを省略すると、既定値のno nameが保存されます。
insert into product (id, price) values (6, 18000);
sqlite> insert into product (id, price) values (6, 18000);
sqlite>
sqlite> .mode column
sqlite> .header on
sqlite>
sqlite> select * from product;
id name price
---------- ---------- ----------
4 Desk 18000
1 PC 75000
6 no name 18000
sqlite>
同様にpriceを省略すると、既定値の0が保存されます。
insert into product (id, name) values (8, 'Chair');
sqlite> insert into product (id, name) values (8, 'Chair');
sqlite>
sqlite> select * from product;
id name price
---------- ---------- ----------
4 Desk 18000
1 PC 75000
6 no name 18000
8 Chair 0
sqlite>
このようにDEFAULT制約を使うと、値を省略した場合にNULLではなく指定した既定値を保存できます。
追加日時を既定値にする
次の値を既定値にすると、行を追加した時点の日付や時刻をカラムに保存できます。
| 指定値 | 形式 |
|---|---|
| CURRENT_TIME | HH : MM : SS |
| CURRENT_DATE | YYYY-MM-DD |
| CURRENT_TIMESTAMP | YYYY-MM-DD HH : MM : SS |
| タイムゾーンはUTCです。 |
date_timeの既定値にCURRENT_TIMESTAMPを指定したテーブルを作成します。
create table user (id integer, name text, date_time default CURRENT_TIMESTAMP);
sqlite> create table user (id integer, name text, date_time default CURRENT_TIMESTAMP);
sqlite>
date_timeを省略して行を追加します。
insert into user (id, name) values (1, 'devkuma');
insert into user (id, name) values (3, 'kimkc');
sqlite> insert into user (id, name) values (1, 'devkuma');
sqlite> insert into user (id, name) values (3, 'kimkc');
sqlite>
sqlite> select * from user;
id name date_time
---------- ---------- -------------------
1 devkuma 2019-10-22 14:43:07
3 kimkc 2019-10-22 14:43:08
sqlite>
date_timeに各行を追加した日時が保存されていることを確認できます。