使用 PostgreSQL 的 CTE 插入多行
假设您有一个包含三个表的关系数据库:table1、table2 和 table3。表table1保存一般用户信息,而表table2和table3包含附加数据,例如密码和地址。当您在 table1 中添加新用户时,您希望同时将用户 ID 和其他唯一数据插入到子表 table2 和 table3 中。
Postgres 9.3 的 数据修改 CTE 提供这种情况的解决方案。 CTE 允许您高效地链接多个 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 -- Nothing to return here ) INSERT INTO table3 (user_id, address, city, phone) SELECT ins1.user_id, ..., ... FROM ins1 RETURNING user_id;
CTE 细分:
最佳实践:
以上是PostgreSQL CTE 如何高效地跨多个表插入多行?的详细内容。更多信息请关注PHP中文网其他相关文章!