INSERTクエリについての詳細な解説と使用例。新しいレコード追加の基本から応用まで学べます。
SQLのINSERT文で複数レコードを一括追加する
複数行を追加するときは、INSERT INTOで列を指定し、VALUESの後に行ごとの値を並べます。 各行を括弧で囲み、行と行の間をカンマで区切ります。セミコロンは最後の行の後に置きます。
INSERT INTO products (name, price, category)
VALUES
('Notebook', 300, 'Stationery'),
('Pencil', 100, 'Stationery');列の数と値の順序をそろえる
この例はname、price、categoryの順に、2件の商品を追加します。 どの行も指定した3列に対応する値が必要です。文字列はシングルクォートで囲みます。 一括追加でも、主キーの重複やNOT NULLなどの制約は確認が必要です。
別テーブルから複数行を追加するINSERT INTO SELECT
既存データをコピーする場合は、VALUESの代わりにSELECT文を続けます。 SELECTが返す列の数と順序を、追加先の列に合わせます。
INSERT INTO users_backup (id, name, email, age)
SELECT id, name, email, age
FROM users
WHERE age > 30;コピー先のusers_backupは事前に作成しておく必要があります。 この条件は30歳を超えるユーザーが対象です。30歳を含めるならage >= 30とします。 画面下の例文では、複数VALUESでの追加を実行して確認できます。
INSERT は データベースに新しいレコード(行)を追加するためのクエリです。
単一のレコード追加だけでなく、複数レコードの一括挿入や、他のテーブルから取得したデータの挿入も可能です。
単一のユーザーレコードをusersテーブルに追加
クエリを実行してください
複数の商品レコードを一度にproductsテーブルに追加
クエリを実行してください
複数のユーザーを一括で追加(複数VALUES)
クエリを実行してください
30歳以上のユーザーを別テーブルにコピー(SELECT結果をINSERT)
クエリを実行してください
列を指定せずINSERTすることは非推奨
必ずテーブル定義の順序通りにすべての値を指定する必要があり、スキーマ変更に弱い。
実務では必ず対象列を明示すること。
自動採番(AUTO_INCREMENT)されるIDは指定しない
ほとんどのDBではID列は指定せず、自動で値が割り当てられる。
NULL値の挿入に注意
NOT NULL制約がある列にはNULLを挿入できない。DEFAULT値がある場合は DEFAULT キーワードを使用。
大量データ挿入時はトランザクション処理を考慮
パフォーマンスと安全性の両面から、適切なバッチサイズで分割挿入することが重要。
- ユーザー登録フォーム送信時に新規ユーザーを登録
- 商品情報を管理画面から追加
- APIから取得したデータを定期的にDBに保存
- 他のテーブルのデータをバックアップテーブルにコピー
- バッチ処理で大量のレコードを一括投入
#25 新しいユーザーを追加
practice_insert_usersテーブルにid=6、名前「中村陽子」、メール「nakamura@example.com」、年齢29のレコードを追加してください。
#26 電子機器カテゴリの商品を追加
practice_insert_productsテーブルにid=6、名前「USBメモリ」、価格1800、カテゴリ「電子機器」の商品を追加してください。
#27 新しい注文を追加
practice_insert_ordersテーブルにid=6でユーザー1が商品2を3個購入した注文(注文日2024-01-20)を追加してください。
#28 複数ユーザーを一度に追加
practice_insert_usersテーブルに松本紗季(id=7, email: matsumoto@example.com, 年齢27)と小林優(id=8, email: kobayashi@example.com, 年齢31)を1つのINSERT文で追加してください。