단일 쿼리를 사용하여 동시에 세 개의 테이블에 데이터를 삽입해야 한다고 가정해 보겠습니다. 테이블 구조는 다음과 같습니다.
<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>
각 삽입에 대해 기본 키를 확인한 후 후속 테이블에서 사용해야 합니다. 그러나 각 삽입에 대해 단일 쿼리를 실행해도 키 값을 즉시 재사용할 수는 없습니다.
세 개의 테이블에 동시에 데이터를 삽입하려면 데이터 수정 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의 Sample_id를 사용하여 Sample1에 삽입하고 user_id를 반환합니다. 마지막으로 세 번째 INSERT는 user_id를 사용하여 Sample2에 삽입됩니다.
일반적으로 CTE에서 데이터 행을 미리 정의하는 것이 더 효율적입니다.
<code class="language-sql">WITH data(firstname, lastname, adddetails, value) AS ( VALUES ('fai55', 'shaggk', 'ss', 'ss2'), ('fai56', 'XXaggk', 'xx', 'xx2') ) ... -- (查询的其余部分保持不变)</code>
데이터 무결성을 보장하려면 고유성 제약 조건, 유형 변환, 동시 쓰기 처리 등의 요소를 고려해야 합니다.
위 내용은 단일 쿼리를 사용하여 세 개의 Postgres 테이블에 동시에 데이터를 삽입하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!