首頁 > 資料庫 > mysql教程 > 如何同時將資料插入多個 Postgres 表,同時保持資料完整性?

如何同時將資料插入多個 Postgres 表,同時保持資料完整性?

Susan Sarandon
發布: 2025-01-12 14:36:41
原創
925 人瀏覽過

How can I insert data into multiple Postgres tables simultaneously while maintaining data integrity?

PostgreSQL 中同時在多個資料表插入資料

使用單一查詢向多個表插入資料可以確保資料庫操作的一致性和效率。這可以透過使用資料修改公共表表達式 (CTE) 來實現,如下所示:

使用資料修改 CTE:

下面的查詢使用資料修改 CTE 來連續地在三個表格中插入資料:

<code class="language-sql">WITH ins1 AS (
   INSERT INTO sample(firstname, lastname)
   VALUES ('fai55', 'shaggk')
   RETURNING id AS sample_id
   ),
ins2 AS (
   INSERT INTO sample1 (sample_id, adddetails)
   SELECT sample_id, 'ss' FROM ins1
   RETURNING user_id
   )
INSERT INTO sample2 (user_id, value)
SELECT user_id, 'ss2' FROM ins2;</code>
登入後複製

每個 INSERT 都依賴先前的 INSERT,確保取得正確的按鍵並在後續插入中使用。

或者,透過提供完整的資料行:

一種更方便的方法是使用 CTE 在一個地方提供完整的資料行:

<code class="language-sql">WITH data(firstname, lastname, adddetails, value) AS (
   VALUES                               
      ('fai55', 'shaggk', 'ss', 'ss2'),  
      ('fai56', 'XXaggk', 'xx', 'xx2')       
   )
, ins1 AS (
   INSERT INTO sample (firstname, lastname)
   SELECT firstname, lastname FROM data
   RETURNING firstname, lastname, id AS sample_id
   )
, ins2 AS (
   INSERT INTO sample1 (sample_id, adddetails)
   SELECT ins1.sample_id, d.adddetails
   FROM   data d
   JOIN   ins1 USING (firstname, lastname)
   RETURNING sample_id, user_id
   )
INSERT INTO sample2 (user_id, value)
SELECT ins2.user_id, d.value
FROM   data d
JOIN   ins1 USING (firstname, lastname)
JOIN   ins2 USING (sample_id);</code>
登入後複製

這種方法允許插入多行數據,並且它透過為第一次 INSERT 選擇不同的值來處理重複行。

解決並發和唯一約束問題:

為了解決潛在的並發問題並確保資料完整性,可以在sample 表的(firstname, lastname) 列中新增UNIQUE 約束,並且可以在INSERT 查詢中使用ON CONFLICT 子句,如下面的連結參考中所述。

以上是如何同時將資料插入多個 Postgres 表,同時保持資料完整性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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