使用多行 INSERT
使用一条语句插入一行或多行,并使用 INSERT ... SELECT 在表之间复制数据。
使用多行 INSERT 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。
单行 INSERT
最简单的形式是指定列并提供值:
INSERT INTO users (email, full_name)
VALUES ('alice@example.com', 'Alice Adams');多行 INSERT
在一条语句中插入多行。这比多次往返更快:
INSERT INTO users (email, full_name) VALUES
('alice@example.com', 'Alice Adams'),
('bob@example.com', 'Bob Brown'),
('carol@example.com', 'Carol Chen');为什么多行插入更快
与数据库的往返次数更少,解析和规划周期更少,并且只需进行一次 WAL 刷写。对于包含数百行的批量插入,多行 VALUES 比逐行插入快 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
无需执行第二次查询,即可返回已插入行的各列(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
\.不要无理由地在大型事务中插入数据
一个事务 = 一个原子块。如果包含一百万行的导入在中途失败,整个事务都会回滚。有时您确实需要这样;有时则应按每批 1 万行进行处理。
INSERT 性能提示
对于大型插入操作:
- 删除二级索引,插入数据,然后重新创建索引
- 如果安全,禁用触发器和 FK 检查
- 尽可能使用 COPY
- 调整
maintenance_work_mem以便重建索引
冲突处理预览
要实现“如果是新数据就插入,否则更新”,请使用 INSERT ... ON CONFLICT——下一课会详细介绍。
回顾
INSERT 很直接;多行 VALUES 和 INSERT … SELECT 可以覆盖日常场景。RETURNING 可避免额外的往返。处理批量数据时,请使用 COPY。
快速检查
要将 100,000 行从 CSV 文件加载到 PostgreSQL,最快的方法是什么?
常见问题解答
「使用多行 INSERT」课时是免费的吗?
是的 — 「使用多行 INSERT」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。
「使用多行 INSERT」这节课中我会学到什么?
使用一条语句插入一行或多行,并使用 INSERT ... SELECT 在表之间复制数据。 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SQL Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「使用多行 INSERT」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SQL Academy 课中编写并运行代码吗?
能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。