0Pricing
SQL Academy · レッスン

複数行のINSERT

1つのステートメントで1行または複数行を挿入し、INSERT ... SELECTでテーブル間のデータをコピーします。

「複数行のINSERT」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

1行のINSERT

最も簡単な形式では、列名を指定して値を入力します。

INSERT INTO users (email, full_name)
VALUES ('alice@example.com', 'Alice Adams');

複数行のINSERT

1つの文で複数の行を挿入します。何度も往復するより高速です。

INSERT INTO users (email, full_name) VALUES
  ('alice@example.com', 'Alice Adams'),
  ('bob@example.com',   'Bob Brown'),
  ('carol@example.com', 'Carol Chen');

複数行が高速な理由

データベースへのラウンドトリップが減り、パースとプランニングのサイクルも減り、WALのフラッシュも1回で済みます。数百行を一括INSERTする場合、複数行のVALUESは1行ずつ実行するより5~10倍高速です。

デフォルト値

DEFAULT(またはNULL)を使用するには、列を省略します。

INSERT INTO orders (user_id, total)
VALUES (1, 99.50);
-- id, created_at, status filled by DEFAULTs

DEFAULTの明示的な指定

または、DEFAULTキーワードを使用します。

INSERT INTO orders (id, user_id, total, status)
VALUES (DEFAULT, 1, 99.50, DEFAULT);

RETURNING

2回目のクエリを実行せずに、挿入した行の列を取得します(PostgreSQL)。

INSERT INTO users (email, full_name)
VALUES ('alice@example.com', 'Alice Adams')
RETURNING id, created_at;

INSERT … SELECT

別のテーブルから行をコピーまたは変換します。

INSERT INTO archive_orders (id, user_id, total)
SELECT id, user_id, total
FROM orders
WHERE created_at < NOW() - INTERVAL '5 years';

COPYによる一括ロード

数万行以上の場合は、COPYコマンドを使用します。これは圧倒的に高速な方法です。

COPY users (email, full_name) FROM '/tmp/users.csv' (FORMAT csv, HEADER true);

-- Or from STDIN in a client:
COPY users (email, full_name) FROM STDIN;
 alice@example.com\tAlice
 bob@example.com\tBob
 \.

理由のない大きなトランザクションでのINSERTを避ける

1つのトランザクションは、1つのアトミックなブロックです。100万行のインポートが途中で失敗すると、すべてロールバックされます。そうしたい場合もありますが、1万行ずつバッチ処理したい場合もあります。

INSERTのパフォーマンスに関するヒント

大量にINSERTする場合は、次のようにします。

  • セカンダリインデックスを削除してからINSERTし、その後で再作成します
  • 安全な場合はトリガーと外部キーのチェックを無効にします
  • 可能な場合はCOPYを使用します
  • インデックスの再構築用にmaintenance_work_memを調整します

競合処理のプレビュー

「新しい場合はINSERTし、そうでなければUPDATEする」には、INSERT ... ON CONFLICTを使用します。次のレッスンで詳しく説明します。

まとめ

INSERTは分かりやすく、複数行のVALUESとINSERT … SELECTで日常的なケースに対応できます。RETURNINGを使うと余分なラウンドトリップを避けられます。一括処理にはCOPYを使用します。

理解度チェック

CSVファイルからPostgreSQLに100,000行をロードする最速の方法はどれですか。

よくある質問

「複数行のINSERT」レッスンは無料ですか?

はい。「複数行のINSERT」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「複数行のINSERT」で何を学びますか?

1つのステートメントで1行または複数行を挿入し、INSERT ... SELECTでテーブル間のデータをコピーします。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「複数行のINSERT」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 複数行のINSERT
  2. UPSERT:ON CONFLICT DO UPDATE(PostgreSQL)
  3. FROMとJOIN形式のUPDATE
  4. USING付きDELETEと安全なパターン
← SQL Academyに戻る