假設您需要使用單一查詢同時將資料插入三個表。表結構如下:
<code class="language-sql">CREATE TABLE sample ( id bigserial PRIMARY KEY, lastname varchar(20), firstname varchar(20) ); CREATE TABLE sample1( user_id bigserial PRIMARY KEY, sample_id bigint REFERENCES sample, adddetails varchar(20) ); CREATE TABLE sample2( id bigserial PRIMARY KEY, user_id bigint REFERENCES sample1, value varchar(10) );</code>
您需要為每次插入確保主鍵,然後在後續表中使用它。但是,為每次插入執行單一查詢不允許立即重複使用鍵值。
為了同時向三個表插入數據,您可以使用數據修改 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>
第一個 CTE,ins1,插入 sample 表並傳回產生的鍵 (sample_id)。然後,ins2 使用來自 ins1 的 sample_id 插入 sample1 並傳回 user_id。最後,第三個 INSERT 使用 user_id 插入 sample2。
通常,預先在 CTE 中定義資料行效率較高:
<code class="language-sql">WITH data(firstname, lastname, adddetails, value) AS ( VALUES ('fai55', 'shaggk', 'ss', 'ss2'), ('fai56', 'XXaggk', 'xx', 'xx2') ) ... -- (查询的其余部分保持不变)</code>
請記住,要考慮唯一性限制、類型轉換和處理並發寫入等因素,以確保資料的完整性。
以上是如何使用單一查詢同時將資料插入三個 Postgres 表中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!