0Pricing
SQL Academy · 课时

使用多行 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用多行 INSERT
  2. UPSERT:ON CONFLICT DO UPDATE(PostgreSQL)
  3. 使用 FROM 的 UPDATE 与连接式更新
  4. 使用 USING 的 DELETE 与安全模式
← 返回 SQL Academy