집 >데이터 베이스 >MySQL 튜토리얼 >데이터 무결성을 유지하면서 동시에 여러 Postgres 테이블에 데이터를 삽입하려면 어떻게 해야 합니까?
PostgreSQL에서 동시에 여러 테이블에 데이터 삽입
단일 쿼리를 사용하여 여러 테이블에 데이터를 삽입하면 데이터베이스 작업의 일관성과 효율성이 보장됩니다. 이는 아래와 같이 데이터 수정 공통 테이블 표현식(CTE)을 사용하여 달성할 수 있습니다.
데이터를 사용하여 CTE 수정:
다음 쿼리는 데이터 수정 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>
각 INSERT는 이전 INSERT에 의존하므로 올바른 키를 얻고 후속 삽입에 사용됩니다.
또는 전체 데이터 행을 제공하여 다음을 수행합니다.
더 편리한 방법은 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>
이 방법을 사용하면 여러 행의 데이터를 삽입할 수 있으며 첫 번째 INSERT에 대해 다른 값을 선택하여 중복 행을 처리합니다.
동시성 및 고유 제약 조건 문제 해결:
잠재적인 동시성 문제를 해결하고 데이터 무결성을 보장하려면 sample
테이블의 (firstname, lastname)
열에 UNIQUE
제약 조건을 추가하고 INSERT
쿼리에 ON CONFLICT
절을 다음과 같이 사용할 수 있습니다. 링크된 참조에 설명된 대로 아래에 설명되어 있습니다.
위 내용은 데이터 무결성을 유지하면서 동시에 여러 Postgres 테이블에 데이터를 삽입하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!