首页 > 数据库 > mysql教程 > PostgreSQL CTE 和 INSERT...RETURNING 如何高效地将数据插入父表和子表?

PostgreSQL CTE 和 INSERT...RETURNING 如何高效地将数据插入父表和子表?

Mary-Kate Olsen
发布: 2024-12-30 11:26:11
原创
921 人浏览过

How Can PostgreSQL CTEs and INSERT...RETURNING Efficiently Insert Data into Parent and Child Tables?

使用 PostgreSQL 的 INSERT...RETURNING 和 CTE 向子表插入多个值

从父表 table1 插入新提取的 user_id在其子表 table2 和 table3 中,PostgreSQL 使用数据修改通用表表达式提供了一个优雅的解决方案(CTE)。

使用 CTE,我们可以链接多个 INSERT 语句以在单个事务中执行多个操作:

WITH ins1 AS (
   INSERT INTO table1 (username, name, surname)
   VALUES ('johnee', 'john', 'smith')
   RETURNING user_id
   )
, ins2 AS (
   INSERT INTO table2 (user_id, password)
   SELECT ins1.user_id, 'secret'
   FROM ins1
   )
INSERT INTO table3 (user_id, adress, city, phone)
SELECT ins1.user_id, ...
FROM ins1
RETURNING user_id;
登录后复制

此代码遵循分步过程:

  1. ins1: 将新行插入 table1 并检索新生成的user_id 使用 RETURNING。此步骤在子表之间建立连接。
  2. ins2: 将 ins1 中的 user_id 与密码一起插入到 table2 中。
  3. 将 ins1 中的 user_id 插入到 table3 中其他数据,例如地址、城市和

要点:

  • 建议为 INSERT 提供列定义列表,以确保数据完整性。
  • 默认值会自动插入,因此具有默认值的列可以在 INSERT 中省略语句。
  • 第三个 INSERT 语句中的最后一个 RETURNING 子句返回 table3 中的 user_id,尽管它通常与 table1 中的 user_id 相同。
  • 数据修改 CTE 允许链接多个 INSERT 和其他数据操作操作集成到单个事务中。

以上是PostgreSQL CTE 和 INSERT...RETURNING 如何高效地将数据插入父表和子表?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板