首頁 > 資料庫 > mysql教程 > PostgreSQL CTE 如何有效率地在多個表格中插入多行?

PostgreSQL CTE 如何有效率地在多個表格中插入多行?

Linda Hamilton
發布: 2025-01-01 13:23:12
原創
831 人瀏覽過

How Can PostgreSQL CTEs Efficiently Insert Multiple Rows Across Multiple Tables?

使用 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 細分:

  • 在table1 中插入新行並傳回新建立的user_id。
ins2 CTE:

使用 ins1 中的 user_id 將資料插入 table2 中。由於不需要傳回值,因此將其省略。

最終 INSERT:
    使用 ins1 中的 user_id 和其他欄位將資料插入 table3 中。您可以根據需要指定所需的列和值。可選的 RETURNING 子句可讓您從 table3 中檢索新建立的 user_id。
  • 最佳實務:
總是在您的表格中包含列定義清單INSERT 語句可確保與表格結構的一致性。 如果欄位應接收預設值,只需在 INSERT 語句中省略它; Postgres 將自動插入預設值。 最後一個 CTE 可以選擇傳回一個值,這對於進一步處理或檢索新建立的 ID 可能很有用。

以上是PostgreSQL CTE 如何有效率地在多個表格中插入多行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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