MySQLでテーブルにデータを追加する方法について書いています。
作成したデータベースのテーブルにデータを追加するには、テーブルに対してINSERT INTO
を使うと良いです。
MySQLのバージョン8.0.32で、動作を検証しています。
INSERTについての公式のページはこちらにあります。
テーブルにデータを追加する
MySQLでテーブルにデータを追加するにはINSERT INTO
を使います。
例えば、下記のようにデータを追加するためのSQLを書くことができます。
INSERT INTO users (name, age, birthday) VALUE ('taro', '25', '1998-01-01');
このSQLを実行すると、users
テーブルに対して、データが追加されます。
(users
テーブルは、こちらの記事で作成したテーブルです)
追加されるデータは、VALUEの後に書いている内容です。
「name」カラムに「taro
」・「age」カラムに「25
」・「birthday」カラムに「1998-01-01
」が当てはめられて、データが1行追加されます。
追加した後に、テーブルを確認すると、下記のように1行追加されていることが確認できました。
mysql> SELECT * FROM users;
+----+------+------+------------+
| id | name | age | birthday |
+----+------+------+------------+
| 1 | taro | 25 | 1998-01-01 |
+----+------+------+------------+
1 row in set (0.00 sec)
id
の列は自動採番(AUTO_INCRIMENT)を指定しているので、特にデータを当てはめなくても追加できています。
INSERT文をわかりやすくまとめると
INSERT文をわかりやすくで書くと、下記のようになります。
INSERT INTO テーブル名 (カラム1, カラム2, カラム3 ... ) VALUE (値1, 値2, 値3 ... );
カラムと値が対応しています。
「カラム1」の箇所に「値1」が入って、「カラム2」の箇所に「値2」が入って… といった形です。
カラムの間はカンマ(,
)で区切って、値の間もカンマ(,
)で区切る必要があります。
テーブルにカラムがあるだけ、記述していくことができます。
また、NULL許可されているカラムや、AUTO_INCRIMENTのカラムは省くことができます。
INTOは省略することができる
INSERT INTOのINTOは省略して書くこともできます。
例えば、先ほどのINSERT文は下記のように省略して書けます。
INSERT users (name, age, birthday) VALUE ('taro', '25', '1998-01-01');
実行すると、同じように1行データが追加されます。
テーブルに複数データを追加する
INSERT文で複数のデータを一括で、登録したい時にはVALUE
をVALUES
にして、複数の値を定義した内容を並べます。
例えば、下記のように指定することができます。
INSERT INTO users (name, age, birthday)
VALUES ('taro', '25', '1998-01-01'),
('jiro', '23', '2000-01-01'),
('yasuaki', '34', '1989-02-06');
users
テーブルを指定した後に、それぞれ値を当てはめるカラムを指定しています。
その後にVALUES
を書いて、丸括弧でカラムに対応する値を並べています。
3つ定義しました。それぞれの定義もカンマ(,
)で区切る必要があります。
これを実行すると、users
テーブルに対して、3行追加されます。
実行した後に確認すると、下記のように行が追加されたのが確認できました。
mysql> SELECT * FROM users;
+----+---------+------+------------+
| id | name | age | birthday |
+----+---------+------+------------+
| 1 | taro | 25 | 1998-01-01 |
| 2 | jiro | 23 | 2000-01-01 |
| 3 | yasuaki | 34 | 1989-02-06 |
+----+---------+------+------------+
3 rows in set (0.00 sec)
テーブルにデータ追加時に重複エラーが出る
テーブルにデータ追加時に重複エラーが出る場合は、主キーまたはユニークなカラムに同じ値を入れていないか確認しましょう。
主キーに同じ値を入れようとするとエラー
主キーの値はユニーク(一意になる値)です。
値が同じものを入れようとすると、エラーになります。
例えば、先ほどのusers
テーブルには、idが1から3までのデータが入っています。
これに対して、下記のようにidを指定してデータを入れようとします…
INSERT INTO users (id, name, age, birthday) VALUE (1, 'taro', '25', '1998-01-01');
すると、下記のようにERROR 1062 (23000)
エラーが発生します。
ERROR 1062 (23000): Duplicate entry '1' for key 'users.PRIMARY'
idとして指定した、値の「1」が重複していると出ています。
主キーには重複しない値を入れる必要があります。
ユニークなカラムに同じ値を入れようとするとエラー
ユニークなカラムにも、同じ値を入れようとするとエラーが発生します。
ユニークなカラムはテーブル作成時にUNIQUE
が付けられているカラムです。
例えば、先ほどのusers
テーブルのname
カラムにUNIQUE
設定がされているとします。
既に、下記のように1行データがある時です。
mysql> SELECT * FROM users;
+----+------+------+------------+
| id | name | age | birthday |
+----+------+------+------------+
| 1 | taro | 25 | 1998-01-01 |
+----+------+------+------------+
1 row in set (0.00 sec)
このときに、同じ名前の値を指定して追加しようとします…
INSERT INTO users (name, age, birthday) VALUE ('taro', '25', '1998-01-01');
そうすると、下記のようにERROR 1062 (23000)
が発生します。
ERROR 1062 (23000): Duplicate entry 'taro' for key 'users.name'
ユニークなカラムにも同じ値を入れないようにしましょう。
他のテーブルからデータを追加する(INSERT SELECT)
他のテーブルからデータを追加する時には、INSERT文を作ってVALUE
の箇所をSELECT
にします。
例えば、user_temporariesというテーブルが下記のように定義されています。(usersテーブルと同じ構造です)
CREATE TABLE user_temporaries (
id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(128),
age SMALLINT,
birthday DATE,
PRIMARY KEY (id)
);
この時にusers
テーブルは下記のように、データが空です。
mysql> SELECT * FROM users;
Empty set (0.00 sec)
そして、user_temporaries
テーブルにデータが3件入っています。
mysql> SELECT * FROM user_temporaries;
+----+--------+------+------------+
| id | name | age | birthday |
+----+--------+------+------------+
| 1 | taro | 25 | 1998-01-01 |
| 2 | jiro | 23 | 2000-01-01 |
| 3 | hanako | 30 | 1993-01-01 |
+----+--------+------+------------+
3 rows in set (0.00 sec)
この状態で、下記のSQLを実行すると、user_temporaries
テーブルをSELECTした結果をusers
テーブルにインサートできます。
INSERT INTO users SELECT * FROM user_temporaries;
users
テーブルに対して、user_temporaries
テーブルを取得した結果を入れています。
また、データを当てはめるカラムを指定することもできます。
INSERT INTO users (name, age, birthday) SELECT name, age, birthday FROM user_temporaries WHERE id = 1;
「name・age・birthday
」のそれぞれのカラムに、SELECTで取得した「name・age・birthday
」の値を入れてインサートしています。
WHERE
でidが「1」のデータのみを取得して、返しています。
2つのSQLを実行すると、下記のような結果になりました。
mysql> SELECT * FROM users;
+----+--------+------+------------+
| id | name | age | birthday |
+----+--------+------+------------+
| 1 | taro | 25 | 1998-01-01 |
| 2 | jiro | 23 | 2000-01-01 |
| 3 | hanako | 30 | 1993-01-01 |
| 4 | taro | 25 | 1998-01-01 |
+----+--------+------+------------+
4 rows in set (0.00 sec)
user_temporaries
テーブルから取得したデータをインサートできました。
テーブルにデータを追加する方法まとめ
今回はMySQLでテーブルにデータを追加する方法を書きました。
記事の内容をまとめると、下記のようになります。
・「`INSERT INTO テーブル名 (カラム…) VALUES (値…), (値…)`」でテーブルに複数のデータを追加することができる。
・主キーやユニークなカラムには、既に入っている内容と同じ値は入れることができない。
・「`INSERT INTO テーブル名 SELECT * FROM テーブル名`」で他のテーブルを使ってインサートできた。
コメント