RDBのテーブルにデータを挿入する方法です。
タイトルでは登録と書きましたが、SQLの世界では挿入と言います。
登録は英語で regist で、挿入は英語で insert です。
SQLでデータを挿入する場合は INSERT文を使います。
テーブルの作成がまだの方はこちらの「SQLでテーブルを作成するCREATE文」をご確認ください。
上の記事で作成したテーブルにデータを挿入するサンプルを用いて説明します。
データを挿入するINSERT文のサンプル
カラムが2つだけの以下のコードのテーブルがあります。
1 2 3 4 |
CREATE TABLE user ( id int(11) NOT NULL PRIMARY KEY, user_name text NOT NULL ); |
これに対しデータを挿入するSQLはこうなります。
1 |
INSERT INTO user (`id`, `user_name`) VALUES ('1', '田中'); |
これで1件のデータが挿入できますが、複数件ある場合はこう書きます。
1 2 3 4 |
INSERT INTO user (`id`, `user_name`) VALUES (1, '田中'), (2, '鈴木'), (3, '山田'); |
上のサンプルはユーザーテーブル(user)用なので、商品テーブル(product)と購入履歴テーブル(history)のサンプルデータの作成コードも下に記載しておきます。
商品テーブル(product)
1 2 3 4 |
INSERT INTO product (`id`, `product_name`) VALUES (1, 'りんご'), (2, 'みかん'), (3, 'マンゴー'); |
購入履歴テーブル(history)
1 2 3 4 |
INSERT INTO history (`id`, `user_id`, `product_id`) VALUES (1, 3, 1), (2, 3, 3), (3, 1, 2); |
INSERT文の解説
INSERT文の構成
INSERT文の構成は以下のようになります。
INSERT INTO テーブル名 (カラム名1, カラム名2, ・・・) VALUES (カラム名1に対応する値, カラム名2に対応する値, ・・・);
VALUES の後の (カラム名1に対応する値, カラム名2に対応する値, ・・・) の部分が実際に登録される値になります。
カラム名の順番は登録された順番じゃなくてもいいです。
しかし、定義した順番と値の順番は一致していなければいけません。
また、カラム名は全て定義する必要はありません。
今回の例のテーブルはカラムが2つあり、その2つともが NOT NULL なので書く必要がありました。
しかし、カラム数が10個20個となってくると、その時は必要ない情報などもあります。
その場合は登録する情報分だけカラムを定義します。
複数行登録する
INSERT INTO テーブル名 (カラム名1, カラム名2, ・・・) VALUES (1件目のデータ), (2件目のデータ), ・・・;
(1件目のデータ) と省略しましたが、(カラム名1に対応する値, カラム名2に対応する値, ・・・)と同じです。
データが複数ある場合は、VALUES の後に (1件目のデータ), (2件目のデータ), ・・・ とカンマ区切りで書きます。
仮にまとめて登録するデータが100件くらいあるのでしたらまとめて1つのSQL文にしたほうがパフォーマンスはいいですが、10件程度ならば1行ずつINSERTしたほうがバグが出る確率は減ります。
上の例はまだカラムが2つしかないシンプルなものですが、カラムが30個くらいあって100件のデータを登録となったらかなり慎重になります。
もし、登録途中の30件目くらいで不正なデータが含まれていて処理が中断された場合など、どこまでを元に戻すか判断できないレベルになります。
そんなに複数行をまとめて登録する場面はあまり無いですが、事前にチェックする内容をより厳しくすれば大丈夫です。
まとめ
データベースにデータを登録するためのSQLはINSERT文を使う。
複数行を登録する場合は慎重に行わないと、もし途中で失敗した場合は復帰がたいへん。
コメントを残す