我有一个实体表,我想从中自动生成数据以用作其他表中的FK。生成的ID将成为其他表中的PK。
Users 表,例如 firstname , lastname ,电子邮件,密码等
条目表是具有一个 entry_Id (PK)列的实体表。
文章表将使用上面 Entry 表中自动生成的 entry_Id 作为PK和其他列,例如 title , authorId ,类别, created_Date 。
照片表将使用上面 Entry 表中自动生成的 entry_Id 作为PK和其他列,例如 title , imageurl , authorId (FK), created_Date 。
评论表将 comment_Id 用作PK,而上面 Entry 表中自动生成的 entry_Id 用作FK形成一个复合密钥。其他列包括用户表中作为FK的 user_Id ,注释, created_Date 。
标记表将 flag_Id 用作PK,而上面 Entry 表中自动生成的 entry_Id 用作FK形成一个复合密钥。其他列包括 Users 表中的 user_Id 作为FK, flag_type 。
我希望我的查询在有人提交表单并自动在其他表(例如 Article 中使用生成的ID)时为 entry 自动生成 entry_Id 。 / strong>,照片,评论和标记。
当我对值进行硬编码时, Article 和 Photo 表正在接受一个 entry_Id 用于多行。
我看到了类似的东西,但是我不确定这是否是我想要的。
START TRANSACTION;
INSERT INTO foo (auto,text)
VALUES(NULL,'text');
INSERT INTO foo2 (id,text)
VALUES(LAST_INSERT_ID(),'text');
COMMIT TRANSACTION;
是否可以使用脚本来使实体表中的自动生成的ID在其他表中重复使用?
答案 0 :(得分:0)
正如wildplasser所评论的那样,自9.1版开始,Postgres具有一项不错的功能,它将cte与returning
关键字结合在一起,使您可以做自己想做的事情。
这是一个基于您的伪代码的示例:
with foo_row as (insert into foo (text) values ('text') returning foo_id)
insert into foo2 (foo_id) select foo_id from foo_row