複数行の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 DEFAULTsDEFAULTの明示的な指定
または、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フィードバックを取得できます。ローカル設定は不要です。