SQLを使ってデータベースにテーブルを作成するには、CREATE TABLE文を使います。
CREATE TABLE文では、テーブルに作成する列の定義を記述します。
1 2 3 4 5 6 |
CREATE TABLE テーブル名 ( 列1の名前 列1のデータ型, 列2の名前 列2のデータ型, 列3の名前 列3のデータ型 ) |
列の定義では最低限の情報として、列の名前とデータ型を指定すればテーブルが作成できます。
INSERT文でテーブルにレコード(データ)を挿入する際に、すべての列の値を必ず指定するのであれば、上記のように列の名前とデータ型のみを定義したテーブルでも問題ありません。
しかし、レコードを挿入する際に、一部の列の値のみを指定してINSERT文を実行すると、値を指定していない列の値はNULLになってします。
データベースには、値を指定せずにレコードを挿入した際に、あらかじめ決めておいた値を自動で設定してくれる仕組みが用意されています。
今回は、SQLのCREATE TABLE文でテーブルを作成する際に、列のデフォルト値を指定する方法について紹介します。
目次
デフォルト値(既定値/初期値)を設定するテーブル
ここでは、デフォルト値を設定するための例を示すためのテーブルとして、会計伝票のデータを管理するテーブルの「伝票テーブル」があるとします。
伝票テーブルには「伝票番号」「日付」「科目(コード)」「入金額」「出金額」「摘要」の5つの列を用意します。
伝票テーブルの列定義
列名 | データ型 |
---|---|
伝票番号 | int |
日付 | date |
科目 | varchar(5) |
入金額 | int |
出金額 | int |
摘要 | varchar(50) |
伝票テーブルを作成するSQLのCREATE TABLE文
伝票テーブルを作成擦るCREATE TABLE文は次のようになります。
1 2 3 4 5 6 7 8 9 |
CREATE TABLE 伝票 ( 伝票番号 int, 日付 date, 科目 varchar(5), 入金額 int, 出金額 int, 摘要 varchar(50) ); |
伝票テーブルにレコードを挿入するSQLのINSERT文
伝票テーブルのすべての列の値を指定してレコードを挿入するINSERT文は次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
INSERT INTO 伝票 ( 伝票番号, 日付, 科目, 入金額, 出金額, 摘要 ) VALUES ( 1, '2020/08/05', 00100, 0, 100000, '消耗品購入' ); |
上記のINSERT文を実行すると、次のようなレコードがテーブルに挿入されます。
伝票番号 | 日付 | 科目 | 入金額 | 出金額 | 摘要 |
---|---|---|---|---|---|
1 | 2020/08/05 | 00100 | 0 | 100000 | 消耗品購入 |
上記のINSERT文では、伝票テーブルのすべての列に対する値をVALUES句で指定してますので、それぞれの値がすべてテーブルに登録されます。
次に、いくつかの列のみを指定した場合のINSERT文を考えてみます。
ここでは、「入金額」以外の値を指定する場合を例にあげます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
INSERT INTO 伝票 ( 伝票番号, 日付, 科目, 出金額, 摘要 ) VALUES ( 2, '2020/08/06', 00200, 50000, '出金情報' ); |
伝票番号 | 日付 | 科目 | 入金額 | 出金額 | 摘要 |
---|---|---|---|---|---|
2 | 2020/08/06 | 00200 | NULL | 100000 | 出金情報 |
上記のINSERT文では、入金額の列については値を指定していないので、NULLが登録されます。
ここで挿入するレコードは出金情報のため、入金額の情報が必要ないので省略していますが、システム的には入金額にNULLが登録されるのが好ましくないとします。
そこで、入金額が指定されていない場合は、NULLではなく「0」が登録されるようにします。(出金額も同様に「0」が登録されるようにします。)
このような場合にデータベースには、デフォルト値(既定値/初期値)を設定する仕組みが用意されています。
デフォルト値(既定値/初期値)を設定するDEFAULTキーワード
デフォルト値は、DEFAULTキーワードを列に指定することで設定できます。
DEFAULTキーワードは、各列のデータ型を定義している箇所の後ろにスペース文字列を入力し、その後に指定します。
DEFAULTキーワードを用いたCREATE TABLE文
以下に伝票テーブルの「入金額」と「出金額」にデフォルト値として「0」が設定されるようにするSQLを示します。
1 2 3 4 5 6 7 8 9 |
CREATE TABLE 伝票 ( 伝票番号 int, 日付 date, 科目 varchar(5), 入金額 int DEFAULT 0, 出金額 int DEFAULT 0, 摘要 varchar(50) ); |
デフォルト値の指定は、DEFAULTキーワードを指定した後に、スペース文字列を入力し、省略時に設定される値を記述します。
上記のINSERTを実行した後で、入金額を省略したINSERT文を実行すると、結果は以下のようになります。
伝票番号 | 日付 | 科目 | 入金額 | 出金額 | 摘要 |
---|---|---|---|---|---|
2 | 2020/08/06 | 00200 | 0 | 100000 | 出金情報 |
上記の例では、DEFAULTキーワードで固定値(リテラル値)を指定しましたが、数式や関数などを設定することも可能です。
例えば、日付型の列に対してGETDATE()、CURRENT_DATE()、CURRENT_TIMESTAMP()、NOW()等の関数を指定することで、タイムスタンプとして使用することもできます。
DEFAULTキーワードを使用したデフォルト値の設定は、データが指定されなかった場合の既定値を定義することができるので、初期設定する値が決まっている場合は、設定しておくとバグを減らすことに役立ちます。
また、デフォルト値の設定は、システムの運用が始まった後でテーブルの定義が変更になった場合でも、既存のSQLが実行時エラーとならないようにするために重宝します。