집 >데이터 베이스 >MySQL 튜토리얼 >PostgreSQL의 ON CONFLICT 절에서 여러 충돌 대상을 처리하는 방법은 무엇입니까?
ON CONFLICT 절에서 여러 충돌 대상 사용
테이블에 여러 개의 고유 열이 포함되어 있고 충돌 시 다른 열을 업데이트하기 위해 INSERT ... ON CONFLICT ... DO UPDATE
구문이 필요한 경우 모든 충돌 대상 열을 포함하는 고유 인덱스를 생성해야 합니다.
질문:
ON CONFLICT
절에서 여러 열을 충돌 대상으로 사용하려고 하면 충돌 감지를 수행하기 위해 고유 인덱스가 필요하기 때문에 오류가 발생합니다. 다음 예를 고려해보세요.
<code class="language-sql">INSERT INTO table ... ON CONFLICT (col1, col2) DO UPDATE SET ....</code>
해결책:
이 문제를 해결하려면 두 열 모두에 고유 인덱스를 생성하세요.
<code class="language-sql">CREATE UNIQUE INDEX idx_t_col1_col2 ON table (col1, col2);</code>
고유 인덱스를 생성한 후 ON CONFLICT
절은 두 개의 열을 충돌 대상으로 지정하여 충돌 시 원하는 업데이트 동작을 달성할 수 있습니다.
<code class="language-sql">INSERT INTO table ... ON CONFLICT (col1, col2) DO UPDATE SET ....</code>
예:
고유한 열 id
및 a
이 있는 테이블을 만들고 충돌을 처리하는 동안 데이터를 삽입합니다.
<code class="language-sql">CREATE TABLE t (id integer, a text, b text); CREATE UNIQUE INDEX idx_t_id_a ON t (id, a); INSERT INTO t VALUES (1, 'a', 'foo'); INSERT INTO t VALUES (1, 'a', 'bar') ON CONFLICT (id, a) DO UPDATE SET b = 'bar';</code>
업데이트된 데이터를 확인하기 위한 쿼리 실행:
<code class="language-sql">SELECT * FROM t;</code>
출력:
<code> id | a | b ----+---+----- 1 | a | bar</code>
위 내용은 PostgreSQL의 ON CONFLICT 절에서 여러 충돌 대상을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!