概要
通常のinsert文ではカラムに値を指定しなかった場合デフォルト値が入る。
一行丸ごとデフォルト値にしたい場合、値に「default values」を指定すればいい。
デフォルト値が設定されていないカラムはnullになる。
利用にあたってはテーブルのスキーマを確認しておくこと。
構文
insert into table_name default values;
実行例
環境
- Windows 10
- sqlite3 Command-Line Shell ver 3.34.1
カラム名 | データ型 | デフォルト値 |
---|---|---|
id | integer | (自動採番) |
name | text | 'no name' |
text | 'team@example.com' | |
create_date | text | データの挿入日 |
update_date | text | (なし) |
sqlite> --# 1.
sqlite> create table sample_table (
...> id integer primary key autoincrement
...> , name text default 'no name'
...> , mail text default 'team@example.com'
...> , create_date text default current_timestamp
...> , update_date text
...> );
sqlite> --# 2.
sqlite> insert into sample_table default values;
sqlite> --# 3.
sqlite> .mode box
sqlite> .nullval (null)
sqlite> --# 4.
sqlite> select * from sample_table;
┌────┬─────────┬──────────────────┬─────────────────────┬─────────────┐
│ id │ name │ mail │ create_date │ update_date │
├────┼─────────┼──────────────────┼─────────────────────┼─────────────┤
│ 1 │ no name │ team@example.com │ 2021-03-07 08:25:58 │ (null) │
└────┴─────────┴──────────────────┴─────────────────────┴─────────────┘
- サンプルテーブルを作成
- デフォルト値の行を追加
- selectの表示結果を見やすくする
- 追加した結果を確認
not null などの制約がある場合
not nullや外部キー制約に違反する場合はエラーになる。
以下はnot null制約が設定されているカラムに対し、 「insert ~ default values」を実行しようとした例。
カラム名 | データ型 | デフォルト値 |
---|---|---|
id | integer | (自動採番) |
name | text | 'no name' |
text | 'team@example.com' | |
create_date | text | データの挿入日 |
update_date | text | not null |
sqlite> create table sample_table (
...> id integer primary key autoincrement
...> , name text default 'no name'
...> , mail text default 'team@example.com'
...> , create_date text default current_timestamp
...> , update_date text not null
...> );
sqlite> insert into sample_table default values;
Error: NOT NULL constraint failed: sample_table.update_date
triggerでは使えない
trigger内では「insert ~ default values」はサポートされておらず、作成時にエラーになる。
sqlite> create trigger
...> new_trigger
...> before insert on
...> sample_table
...> begin
...> insert into update_log default values;
...> end;
Error: near "default": syntax error
参考サイト
-
SQLite 公式サイト(英語)
https://www.sqlite.org/index.html -
SQLite Query Language: INSERT(英語)
公式のINSERT構文に関するドキュメント
https://www.sqlite.org/lang_insert.html -
CREATE TRIGGER(英語)
公式のCREATE TRIGGER構文に関するドキュメント
https://www.sqlite.org/lang_createtrigger.html