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中文网其他相关文章!