簡體   English   中英

如何在另一個表的 ID 中的 Postregsql 實體表中插入自動生成的 ID

[英]How to insert an auto-generated id in a Postregsql entity table in another table's ID

我有一個實體表,我想從中自動生成數據以在其他表中用作 FK。 生成的 Id 將成為其他表中的 PK。

我的桌子

帶有user_Id (PK) 的用戶表,以及其他列,例如firstnamelastnameemailpassword等。

條目表是具有一個entry_Id (PK) 列的實體表。

Article表將使用上面Entry表中自動生成的entry_Id作為 PK 與其他列,例如titleauthorIdcategorycreated_Date

照片表將使用上面Entry表中自動生成的entry_Id作為 PK 與其他列,如titleimageurlauthorId (FK)、 created_Date

評論表將使用comment_Id作為PK,將上面Entry表中自動生成的entry_Id作為FK,形成一個復合鍵。 其他列包括來自Users表的user_Id作為 FK、 commentcreated_Date

Flag表會使用flag_Id作為 PK,上面的Entry表中自動生成的entry_Id作為 FK,形成一個復合鍵。 其他列包括來自用戶flag_typeuser_Id作為 FK。

我想做的事

我希望我的查詢在有人提交表單時自動生成entry_Id並在其他(例如ArticlePhotoCommentFlag )中自動使用生成的 id 。

當我對這些值進行硬編碼時, ArticlePhoto表接受一個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 可在其他表中重復使用?

正如 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM