首頁 > 資料庫 > mysql教程 > PostgreSQL CTE 和 INSERT...RETURNING 如何有效率地將資料插入父表和子表?

PostgreSQL CTE 和 INSERT...RETURNING 如何有效率地將資料插入父表和子表?

Mary-Kate Olsen
發布: 2024-12-30 11:26:11
原創
921 人瀏覽過

How Can PostgreSQL CTEs and INSERT...RETURNING Efficiently Insert Data into Parent and Child Tables?

使用PostgreSQL 的INSERT...RETURNING 和CTE 向子表插入多個值

從父表table1 插入新提取的_user_id在其子表table2 和table3 中,PostgreSQL使用資料修改通用表表達式提供了一個優雅的解決方案(CTE)。

使用CTE,我們可以連結多個INSERT 語句以在單一交易中執行多個操作:

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;
登入後複製

此程式碼遵循逐步流程:

  1. ins1: 將新行插入table1 並檢索新產生的user_id 使用RETURNING。此步驟在子表之間建立連線。
  2. ins2: 將 ins1 中的 user_id 與密碼一起插入 table2 中。
  3. 將ins1 中的user_id 插入table3 中其他數據,例如地址、城市和

重點:

  • 建議為INSERT 提供列定義列表,以確保資料完整性。
  • 預設值會自動插入,因此具有預設值的欄位可以在 INSERT 中省略語句。
  • 第三個 INSERT 語句中的最後一個 RETURNING 子句傳回 table3 中的 user_id,儘管它通常與 table1 中的 user_id 相同。
  • 資料修改 CTE 允許連結多個 INSERT 和其他資料操作操作整合到單一事務中。

以上是PostgreSQL CTE 和 INSERT...RETURNING 如何有效率地將資料插入父表和子表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板