首页 > 数据库 > mysql教程 > PostgreSQL 的 CTE 如何高效处理多表更新的带有 RETURNING 的多个 INSERT?

PostgreSQL 的 CTE 如何高效处理多表更新的带有 RETURNING 的多个 INSERT?

Mary-Kate Olsen
发布: 2025-01-02 14:05:40
原创
917 人浏览过

How Can PostgreSQL's CTEs Efficiently Handle Multiple INSERTs with RETURNING for Multi-Table Updates?

PostgreSQL 中多表更新的多重 INSERT...RETURNING

将数据插入到多个子表中,同时引用来自子表的新插入数据父表可能是一项具有挑战性的任务。在这种情况下,PostgreSQL 使用数据修改公共表表达式 (CTE) 提供了强大的解决方案。

最初,我们可以使用 RETURNING 子句检索父表中新插入的行的 user_id:

INSERT INTO table1 (default,'johnee','john','smith',default) RETURNING userid;
登录后复制

为了执行多个 INSERT,我们可以利用数据修改 CTE 作为如下:

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;
登录后复制

在此代码中,ins1 CTE 执行 INSERT 到 table1 并返回 user_id。然后,ins2 CTE 使用 ins1 中的 user_id 将数据插入到 table2 中。最后,第三个 INSERT 使用 ins1 中的 user_id 将数据插入到 table3 中,并可选择返回结果 user_id。

通过使用数据修改 CTE,我们可以有效地链接多个 INSERT,并确保新插入的数据在 child 中表与父表保持必要的关系。

以上是PostgreSQL 的 CTE 如何高效处理多表更新的带有 RETURNING 的多个 INSERT?的详细内容。更多信息请关注PHP中文网其他相关文章!

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