【SQL】INSERT:デフォルト値
デフォルト値を挿入する
- テーブルの列にデフォルト値(初期値)を設定することができる
- デフォルト値を設定するためには、
CREATE TABLE文の中で「DEFAULT制約」をつける
CREATE TABLE ShohinIns
(
shohin_id CHAR(4) NOT NULL,
shohin_mei VARCHAR(100) NOT NULL,
shohin_bunrui VARCHAR(32) NOT NULL,
/* 「DEFAULT 0」で
販売単価のデフォルト値を0に設定 */
hanbai_tanka INTEGER DEFAULT 0,
shiire_tanka INTEGER,
torokubi DATE,
PRIMARY KEY(shohin_id)
);
デフォルト値の利用方法
1. 明示的にデフォルト値を挿入する
VALUES句にDEFAULTキーワードを指定する
/* 「hanbai_tanka」に
「DEFAULT」を割り当てる */
INSERT INTO ShohinIns
(
shohin_id, shohin_mei, shohin_bunrui, hanbai_tanka, shiire_tanka, torokubi
) VALUES (
'0007', 'おろしがね', 'キッチン用品', DEFAULT, 790, '2009-04-28'
);
/* 「hanbai_tanka」は0になっている */
shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi
-----------+------------+---------------+--------------+--------------+------------
0007 | おろしがね | キッチン用品 | 0 | 790 | 2009-04-28
2. 暗黙的にデフォルト値を挿入する
デフォルト値が設定されている列を、列リスト、値リストからも省略する
INSERT INTO ShohinIns
(
/* 「hanbai_tanka」を省略 */
shohin_id, shohin_mei, shohin_bunrui, shiire_tanka, torokubi
) VALUES (
/* 値の記述も省略 */
'0007', 'おろしがね', 'キッチン用品', 790, '2009-04-28'
);
/* 「hanbai_tanka」は0になっている */
shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi
-----------+------------+---------------+--------------+--------------+------------
0007 | おろしがね | キッチン用品 | 0 | 790 | 2009-04-28
どちらを使ってもいいけど「1. 明示的にデフォルト値を挿入する」ほうが、ぱっと見たときに分かりやすい
デフォルト値の設定していない列を省略→NULLになる
デフォルト値が設定されていない列を省略した場合、NULLが割り当てられる →NOT NULL制約がつけられている列を省略するとエラーになる
/* 「shiire_tanka」を省略
「NOT NULL制約」なし */
INSERT INTO ShohinIns
(
shohin_id, shohin_mei, shohin_bunrui, hanbai_tanka, torokubi
) VALUES (
'0008', 'ボールペン', '事務用品', 100, '2009-11-11'
);
/* 「shiire_tanka」は
NULLになっている */
shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi
-----------+------------+---------------+--------------+--------------+------------
0008 | ボールペン | 事務用品 | 100 | | 2009-11-11
/* 「shohin_mei」を省略
「NOT NULL制約」あり */
INSERT INTO ShohinIns
(
shohin_id, shohin_bunrui, hanbai_tanka, shiire_tanka, torokubi
) VALUES (
'0009', '事務用品', 1000, 500, '2009-12-12'
);
/* エラーが出る */
ERROR: null value in column "shohin_mei" of relation "shohinins" violates not-null constraint
DETAIL: Failing row contains (0009, null, 事務用品, 1000, 500, 2009-12-12).
【整理】列を省略したときの動き
DEFAULT設定あり |
DEFAULT設定なし |
|
|---|---|---|
NOT NULL制約なし |
デフォルト値が入る | NULLが入る |
NOT NULL制約あり |
デフォルト値が入る | エラーになる |
INSERTのまとめ:データの登録とNOT NULL/この記事/他のテーブルからコピーする
参考書籍:ミック『SQL 第2版 ゼロからはじめるデータベース操作』(翔泳社)