如何在另一个表的ID

时间:2019-11-02 14:40:31

标签: database postgresql

我有一个实体表,我想从中自动生成数据以用作其他表中的FK。生成的ID将成为其他表中的PK。

我的桌子

具有 user_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在其他表中重复使用?

1 个答案:

答案 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