DEFAULT制約(カラムにデフォルト値を設定する)

カラムに DEFAULT 制約をつけることでカラムにデフォルトの値を設定することができます。データを追加したとき、対象のカラムに値を指定しなかった場合にはデフォルト値がカラムに格納されます。ここでは MariaDB における DEFAULT 制約の使い方について解説します。

(Last modified: )

DEFAULT 制約の使い方

テーブルを作成するときにカラムに対して DEFAULT 制約を付けることができます。書式は次の通りです。

CREATE TABLE tbl_name
  (col_name data_type DEFAULT default_value|(expression),...)

カラムのデータ型のあとに DEFAULT 定数 と記述することでカラムにデフォルトの値を設定できます。テーブルにデータを追加するとき、デフォルト値が設定されたカラムに値を設定しなかった場合、デフォルト値がカラムに格納されます。

デフォルト値には定数以外に関数などを指定可能です。 MariaDB 10.2.1 では多くの関数を指定することができるようになりました。定数以外を指定する場合は括弧()で囲むことで値と区別します。

では実際に試してみます。次のように実行してください。

create table user (id int, old int default 0, name varchar(10) default 'unknown');

DEFAULT 制約の使い方(1)

新しいテーブルを作成しました。テーブルには id カラムと old カラムと name カラムがあり、 old カラムと name カラムには DEFAULT 制約が設定されています。

作成したテーブルのカラム情報を確認します。

show columns from user;

DEFAULT 制約の使い方(2)

Default カラムの値をみていただくと、 old カラムと name カラムにはそれぞれ指定したデフォルト値が設定されています。また今回 DEFAULT 制約を設定していない id カラムには NULL が設定されています。明示的に DEFAULT 制約を設定していないカラムはデフォルト値が NULL に設定されます。( AUTO_INCREMENT や TIMESTAMP が設定されている場合を除く)。

それではテーブルに 4 つのデータを追加してみます。

insert into user values(1, 28, 'Yamada');
insert into user(id, old) values(2, 34);
insert into user(id, name) values(3, 'Suzuki');
insert into user() values();

DEFAULT 制約の使い方(3)

追加したデータをテーブルから取得してみます。

select * from user;

DEFAULT 制約の使い方(4)

1 つ目のデータはすべてのカラムに値を指定してデータを追加しています。 2 つ目のデータは name カラムの値を指定せずにデータを追加したので name カラムにはデフォルト値に設定してある unknown が格納されています。 3 つ目のデータは old カラムの値を指定せずにデータを追加したので old カラムにはデフォルト値に設定してある 0 が格納されています。

4 つ目のデータはすべてのカラムの値を指定せずにデータを追加しています。このとき id カラムには DEFAULT 制約が設定されていないため NULL が格納されています。

このようにカラムにデフォルト値が設定されている場合、データを追加した時にカラムに値が指定されていないとデフォルト値が格納されます。

デフォルト値に組み込み関数や演算子を使用する

DEFAULT 制約では定数だけでなく組み込み関数や演算子を指定することもできます。簡単なサンプルとして次のようなテーブルを作成しました。

create table sample(id int default 0, num float default (rand() * 10), t time default (now()));

デフォルト値に組み込み関数や演算子を使用する(1)

作成したテーブルのカラム情報を確認します。

show columns from sample;

デフォルト値に組み込み関数や演算子を使用する(2)

Default カラムの値をみていただくと、 id カラムが 0 、 num カラムが (rand() * 10) 、 t カラムが current_timestamp() となっています。

それではデータを追加し、追加したあとでテーブルからデータを取得してみます(すべてデフォルト値を使うようにデータを追加しています)。

insert into sample() values();

デフォルト値に組み込み関数や演算子を使用する(3)

追加されたデータを確認すると、 num カラムには RAND() 関数を使って 0.0 から 1.0 までの間のランダムな値を取得したあと 10倍 された値がデフォルト値として格納されています。また t カラムにはデータを追加した時の時刻を取得してデフォルト値として格納されています。

このようにデフォルト値には定数だけではなく組み込み関数や演算子を使った結果などを設定することができます。

-- --

MariaDB における NOT NULL 制約の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。