ホームページ > データベース > 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 を挿入するにはPostgreSQL は、子テーブル table2 と table3 にデータを変更する共通テーブル式を使用した洗練されたソリューションを提供します。 (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 に新しい行を挿入し、新しく生成された行を取得しますRETURNING を使用した user_id。この手順により、子テーブル間の接続が確立されます。
  2. ins2: ins1 の user_id をパスワードとともに table2 に挿入します。
  3. ins1 の user_id を table3 に挿入します。住所、都市などの追加データPhone.

キーポイント:

  • データの整合性を確保するために、INSERT の列定義リストを提供することをお勧めします。
  • デフォルト値は自動的に挿入されるため、デフォルト値を持つ列は INSERT で省略できます。
  • 3 番目の INSERT ステートメントの最後の RETURNING 句は、table3 の user_id を返しますが、通常、これは table1 の user_id と同じです。
  • データ変更 CTE により、複数の INSERT などをチェーンすることができます。データ操作操作を単一のトランザクションにまとめます。

以上がPostgreSQL CTE と INSERT...RETURNING はどのようにして親テーブルと子テーブルにデータを効率的に挿入できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート