> 데이터 베이스 > MySQL 튜토리얼 > 단일 쿼리로 여러 관련 Postgres 테이블에 데이터를 삽입하는 방법은 무엇입니까?

단일 쿼리로 여러 관련 Postgres 테이블에 데이터를 삽입하는 방법은 무엇입니까?

DDD
풀어 주다: 2025-01-12 14:50:41
원래의
137명이 탐색했습니다.

How to Insert Data into Multiple Related Postgres Tables in a Single Query?

여러 관련 Postgres 테이블에 대한 단일 쿼리 데이터 삽입

이 가이드에서는 단일 SQL 쿼리를 사용하여 상호 연결된 여러 Postgres 테이블에 데이터를 삽입하는 문제, 특히 초기 삽입에서 기본 키를 검색하고 후속 삽입에서 이를 외래 키로 활용해야 하는 경우에 대해 설명합니다.

문제: 단일 쿼리 내에서 3개 이상의 관련 테이블에 데이터를 효율적으로 삽입하여 적절한 외래 키 관계가 유지되도록 합니다.

해결책: 데이터 수정 CTE 활용

공통 테이블 표현식(CTE)은 우아한 솔루션을 제공합니다. 데이터 수정 CTE를 사용하면 순차적인 INSERT 작업이 가능하며, 각 후속 삽입은 이전 삽입의 결과에 따라 달라집니다.

구현 예:

다음은 데이터 수정 CTE를 사용하여 세 개의 테이블(sample, sample1, sample2)에 데이터를 삽입하는 방법을 보여줍니다.

<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>
로그인 후 복사

설명:

  1. ins1: sample 테이블에 행을 삽입하고 새로 생성된 id(기본 키)를 sample_id.
  2. 으로 반환합니다.
  3. ins2: sample_idins1을 활용하여 sample1에 행을 삽입하고 생성된 user_id을 반환합니다.
  4. 최종 INSERT: user_idins2을 사용하여 sample2에 데이터를 삽입합니다.

대안: 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>
로그인 후 복사

data CTE 내에서 정의하여 여러 행을 효율적으로 삽입합니다.

중요 고려 사항:

  • 외래 키 제약 조건: 참조 무결성을 유지하려면 적절한 외래 키 제약 조건이 정의되어 있는지 확인하세요.
  • ON CONFLICT 조항: ON CONFLICT을 활용하여 잠재적인 중복 키 오류를 관리하세요.
  • 동시성: 동시 데이터 쓰기 중 잠재적인 경합 상황에 유의하세요.

이 포괄적인 접근 방식은 단일 쿼리 내에서 관련 Postgres 테이블 전체의 데이터 삽입을 관리하기 위한 강력하고 효율적인 방법을 제공합니다.

위 내용은 단일 쿼리로 여러 관련 Postgres 테이블에 데이터를 삽입하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿