ホームページ >データベース >mysql チュートリアル >単一のクエリを使用して 3 つの Postgres テーブルに同時にデータを挿入するにはどうすればよいですか?
単一のクエリを使用して 3 つのテーブルに同時にデータを挿入する必要があるとします。テーブル構造は次のとおりです:
<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>
挿入ごとに主キーを確保し、それを後続のテーブルで使用する必要があります。ただし、挿入ごとに 1 つのクエリを実行しても、キー値をすぐに再利用することはできません。
3 つのテーブルに同時にデータを挿入するには、データ変更 CTE (Common Table Expression) を使用できます。これらは、連続する挿入間の依存関係を確立します:
<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_id) を返します。次に、ins2 は、ins1 のサンプル ID を使用してサンプル 1 に挿入し、ユーザー ID を返します。最後に、3 番目の INSERT は user_id を使用してサンプル 2 に挿入します。
通常は、CTE でデータ行を事前に定義する方が効率的です。
<code class="language-sql">WITH data(firstname, lastname, adddetails, value) AS ( VALUES ('fai55', 'shaggk', 'ss', 'ss2'), ('fai56', 'XXaggk', 'xx', 'xx2') ) ... -- (查询的其余部分保持不变)</code>
データの整合性を確保するために、一意性の制約、型変換、同時書き込みの処理などの要素を必ず考慮してください。
以上が単一のクエリを使用して 3 つの Postgres テーブルに同時にデータを挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。