DEFAULT制約

広告

テーブルにデータを追加する時、値を省略したカラムには通常NULLが格納されますがNULLの代わりにデフォルトで格納される値を設定した場合にDEFAULT制約を設定します。ここではDEFAULT制約の使い方について解説します。

1.DEFAULT成約の使い方
2.CURRENT_TIME, CURRENT_DATE, CURRENT_TIMESTAMP

DEFAULT成約をカラムに設定する場合、書式は次の通りです。

CREATE TABLE テーブル名(カラム名 DEFAULT 値, ...);

値にはNULL、数値、文字列が指定できます。

では実際に試してみます。次のようなテーブルを作成しました。「price」カラムと「name」カラムにはそれぞれDEFAULT成約が設定されています。

create table product(id integer, name text default 'no name', 
  price integer default 0);

p12-1

まずいくつかのデータを追加してみます。DEFAULT制約が設定されているカラムでも値を指定した場合には指定した値がカラムに格納されます。

p12-2

次にDEFAULT制約が設定されている「name」カラムの値を指定せずにデータを追加してみます。この場合「name」カラムにはテーブル作成時に設定したデフォルト値である「no name」が格納されます。

p12-3

同じようにDEFAULT制約が設定されている「price」カラムの値を指定せずにデータを追加してみます。この場合「price」カラムにはテーブル作成時に設定したデフォルト値である「0」が格納されます。

p12-4

このように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);

p12-5

それではデータをいくつか追加してみます。

p12-6

DEFAULT制約を設定した「ts」カラムに、データを追加した時の日付と時刻が格納されていることが確認できます。

( Written by Tatsuo Ikura )