> 데이터 베이스 > MySQL 튜토리얼 > PostgreSQL CTE는 어떻게 여러 테이블에 여러 행을 효율적으로 삽입할 수 있습니까?

PostgreSQL CTE는 어떻게 여러 테이블에 여러 행을 효율적으로 삽입할 수 있습니까?

Linda Hamilton
풀어 주다: 2025-01-01 13:23:12
원래의
832명이 탐색했습니다.

How Can PostgreSQL CTEs Efficiently Insert Multiple Rows Across Multiple Tables?

PostgreSQL의 CTE로 여러 행 삽입

table1, table2, table3의 세 테이블이 있는 관계형 데이터베이스가 있다고 가정합니다. table1 테이블에는 일반 사용자 정보가 저장되고, table2 및 table3 테이블에는 비밀번호, 주소와 같은 추가 데이터가 포함됩니다. table1에 새 사용자를 추가하면서 사용자 ID와 기타 고유 데이터를 하위 테이블 table2 및 table3에 동시에 삽입하려고 합니다.

Postgres 9.3의 데이터 수정 CTE는 이 시나리오에 대한 솔루션입니다. CTE를 사용하면 여러 INSERT 작업을 효율적으로 연결할 수 있습니다.

데이터 수정 CTE를 사용하여 작업을 수행하는 방법은 다음과 같습니다.

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
    -- Nothing to return here
)
INSERT INTO table3 (user_id, address, city, phone)
SELECT ins1.user_id, ..., ...
FROM ins1
RETURNING user_id;
로그인 후 복사

CTE 분석:

  • ins1 CTE: table1에 새 행을 삽입하고 새로 생성된 user_id를 반환합니다.
  • ins2 CTE: ins1의 user_id를 사용하여 table2에 데이터를 삽입합니다. 값을 반환할 필요가 없으므로 생략합니다.
  • 최종 INSERT: ins1의 user_id와 추가 열을 사용하여 table3에 데이터를 삽입합니다. 필요에 따라 원하는 열과 값을 지정할 수 있습니다. 선택적 RETURNING 절을 사용하면 table3에서 새로 생성된 user_id를 검색할 수 있습니다.

모범 사례:

  • 항상 열 정의 목록을 테이블에 포함하세요. INSERT 문을 사용하여 테이블 구조와의 일관성을 보장하세요.
  • 열이 기본값을 받아야 하는 경우 간단히 INSERT 문에서는 생략하세요. Postgres는 자동으로 기본값을 삽입합니다.
  • 마지막 CTE는 선택적으로 값을 반환할 수 있으며, 이는 추가 처리 또는 새로 생성된 ID를 검색하는 데 유용할 수 있습니다.

위 내용은 PostgreSQL CTE는 어떻게 여러 테이블에 여러 행을 효율적으로 삽입할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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