カラム数が多いテーブルへのデータ追加

広告

前のページで記載した通り、テーブルにデータを追加する時、全てのカラムに値を指定してデータを追加する場合はカラム名の記述が省略できます。

insert into tokuten values(val1, val2, val3, val4, val5);

それに対して特定のカラムにだけ値を指定する場合はカラム名を指定する必要があります。

insert into tokuten(col1, col2, col5) values(val1, val2, val5);

通常はこれで問題ありませんが、カラム数が非常に多いようなテーブルに対して一部のカラムにだけ値を指定しない場合、カラム名をずらずらと記述しなければならずSQL文も長くなってしまうと同時に入力間違いも発生しやすくなります。

例として次のようなテーブルで考えて見ます。

mysql> create table seiseki(id int, name varchar(10), 
    -> goukaku tinyint default 0,
    -> suugaku int, eigo int, rika int, shakai int, kokugo int);

p2-1

このテーブルに対して「goukaku」カラム以外のカラムに値を指定してデータを追加するには次のように記述する必要があります。

mysql> insert into seiseki(id, name, suugaku, eigo, rika, shakai, kokugo)
    -> values(1, '西岡', 45, 72, 38, 87, 68);

p2-2

全てのカラムに値を指定していないので値を指定するカラム名を列挙する必要があります。テーブルに含まれるカラム数が多くなればなるほど記述間違いの可能性が高くなります。

ただこれは次のように記述することもできます。

mysql> insert into seiseki values(2, '山田', 0, 83, 59, 91, 94, 47);

p2-3

本来デフォルトの値を使うべきカラムに対して明示的にデフォルトの値を指定しています。すると全てのカラムに対して値を指定していますのでINSERT文からカラム名の記述を省略することができます。

DEFAULT関数とDEFAULTキーワード

デフォルトの値を使うかわりに値を直接記述すると、今度は値の記述ミスなどの可能性が出てきます。またデフォルトの設定が変更になった場合もSQL文の修正が必要です。

そこで、DEFAULT関数を使いカラムに設定されているデフォルトの値を取得しその値を記述するようにします。(DEFAULT関数の使い方については「DEFAULT関数」を参照して下さい)。

先ほどのテーブルの場合であれば次のように記述することができます。

mysql> insert into seiseki
    -> values(3, '井上', default(goukaku), 76, 69, 89, 83, 70);

p2-4

値を直接記述する代わりにDEFAULT関数を使ってカラムのデフォルト値を読み込み、その値を追加するデータとして利用しています。このように記述することで本来の目的であるカラム名の列挙を省略しながらデフォルトの値を使いたいカラムにはデフォルト値を利用することが可能となります。

またMySQLではDEFAULT関数を使用する代わりにDEFAULTキーワードを使用することもできます。デフォルトの値を参照したい箇所に単にDEFAULTと記述して下さい。

実際には次のように記述します。

mysql> insert into seiseki values(4, '木下', default, 35, 73, 47, 98, 52);

p2-5

DEFAULT関数では引数にカラム名を指定しましたが、DEFAULTキーワードでは記述された位置から対象となるカラムを判断します。使い方はDEFAULT関数と同じです。

( Written by Tatsuo Ikura )