MySQLでデータを追加する「INSERT」

MySQLでテーブルにデータを追加する場合は、INSERT文を使用します。

INSERT文の使い方

INSERT文の書式は以下の通りです。

INSERT INTO テーブル名 VALUES (値1, 値2, 値3,...);

この場合はカラム数と同数のデータを設定する必要があります。値は対象のカラムに記述された順序で格納されていきます。

また、指定したカラムに値を設定する場合の書式は以下の通りです。

INSERT INTO テーブル名(カラム1, カラム2, カラム3,...) VALUES (値1, 値2, 値3,...);

この場合は指定したカラムに対応する値が設定されます。指定していないカラムにはDEFAULT制約が設定されていればその値が格納され、設定されていなければNULLが格納されます。

データを追加する

今回は以下のテーブルを例として使用します。

mysql> DESC user;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| ID    | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | text             | NO   |     | NULL    |                |
| score | int(11)          | YES  |     | 0       |                |
+-------+------------------+------+-----+---------+----------------+

以下はuserテーブルにIDが1、nameがyamada、 scoreが100を挿入する例です。

 INSERT INTO user VALUES (1, 'yamada', 100);

SELECT文を使ってデータを表示すると、データが追加されていることを確認できます。

mysql> select * from user;
+----+--------+-------+
| ID | name   | score |
+----+--------+-------+
|  1 | yamada |   100 |
+----+--------+-------+

もしカラム数と指定した値の数が合わない場合は以下のようなエラーが発生します。

mysql> INSERT INTO user VALUES (2, 'yamada');
ERROR 1136 (21S01): Column count doesn't match value count at row 1

また、AUTO_INCREMENT制約が付いているカラムは0あるいはNULLを設定することで自動的に連番の値を設定することができます。

INSERT INTO user VALUES (0, 'takahashi', 70);

この結果を表示すると、IDに2が振られていることを確認できます。

mysql> select * from user;
+----+-----------+-------+
| ID | name      | score |
+----+-----------+-------+
|  1 | yamada    |   100 |
|  2 | takahashi |    70 |
+----+-----------+-------+

なお、PRIMARY KEYとなっているカラムに既にある値と同じ値を設定した場合は、エラーになるので注意してください。

mysql> INSERT INTO user VALUES (2, 'ito', 50);
ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'

複数行のデータを同時に追加する

複数行のデータを同時に追加する場合は、VALUESの後に「,」で区切って記述します。

INSERT INTO user VALUES (3, 'tanaka', 60), (4, 'sato',  80);

指定カラムにデータを追加

INSERTを使用するとき、すべてのカラムではなく一部のカラムにだけデータを設定したい場合は、テーブル名の後に括弧でカラムを指定します。

INSERT INTO user(name) VALUES ('suzuki');

この例では、userテーブルのnameのカラムのみ値を設定しています。

mysql > select * from user;
+----+--------+-------+
| ID | name   | score |
+----+--------+-------+
|  1 | suzuki |     0 |
+----+--------+-------+

このときIDにはAUTO_INCREMENTが設定されているため、自動的にIDに1が入り、scoreはDEFAULT制約があるため0が入ります。