ON CONFLICT 구문은 데이터를 삽입할 때 중복 키 또는 제약 조건 위반과 관련된 처리 방법을 지정하는 데 사용됩니다. 이를 통해 데이터 삽입 중에 중복 키나 제약 조건 위반으로 인한 오류를 처리하거나, 특정 동작을 수행할 수 있습니다.
일반적으로 ON CONFLICT 구문은 INSERT 문에서 사용되며, 중복 키 또는 제약 조건 위반으로 인해 삽입이 실패할 경우 수행되어야 할 작업을 정의하는 역할을 합니다.
ON CONFLICT 구문은 아래와 같은 형식을 갖습니다:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON CONFLICT (conflict_target) DO UPDATE SET column1 = value1, column2 = value2, ...;
ON CONFLICT (conflict_target): 중복 키 또는 제약 조건 위반으로 인해 충돌이 발생했을 때 처리 방법을 지정하는 부분입니다. conflict_target은 중복을 확인할 열이나 제약 조건을 나타내며, 주로 고유한 키나 유니크 제약 조건을 기준으로 합니다.
DO UPDATE SET column1 = value1, column2 = value2, ...: 중복이 발생한 경우 업데이트할 열과 값들을 지정합니다. 이 부분은 충돌이 발생했을 때 수행될 업데이트 작업을 정의합니다.
ON CONFLICT 구문을 사용하면 중복 키나 제약 조건 위반으로 인한 오류를 처리할 수 있으며, 데이터의 중복을 피하거나 적절한 업데이트 작업을 수행할 수 있습니다.
DO UPDATE 외에도 다양한 충돌 처리 옵션을 사용할 수 있습니다. 이러한 옵션들은 중복 발생 시 수행될 동작을 제어하며, DO NOTHING, DO NOTHING WHERE, DO UPDATE SET, DO UPDATE SET WHERE, DO NOTHING ON CONSTRAINT, DO UPDATE SET ... WHERE ... 등이 있습니다. 아래에서 각각의 옵션에 대해 설명하겠습니다:
1. DO NOTHING: 중복 발생 시 아무 작업도 수행하지 않습니다. 즉, 중복 데이터가 무시됩니다.
2. DO NOTHING WHERE condition: 특정 조건을 만족할 때만 중복 발생 시 아무 작업도 수행하지 않습니다. 조건을 충족하지 않으면 일반적인 오류가 발생합니다.
3. DO UPDATE SET column1 = value1, column2 = value2, ...: 중복 발생 시 지정한 열들을 업데이트합니다.
4. DO UPDATE SET column1 = value1, column2 = value2, ... WHERE condition: 중복 발생 시 지정한 조건을 만족할 때만 업데이트 작업을 수행합니다.
5. DO NOTHING ON CONSTRAINT constraint_name: 특정 제약 조건 위반 시 아무 작업도 수행하지 않습니다. 제약 조건의 이름을 지정하여 해당 조건 위반 시에만 적용됩니다.
6. DO UPDATE SET ... WHERE ...: 업데이트할 열과 조건을 모두 지정하는 방식으로, 중복 발생 시 업데이트 작업을 수행합니다.
이러한 옵션들을 조합하여 ON CONFLICT 구문을 통해 데이터 중복을 처리하거나 원하는 방식으로 업데이트 작업을 수행할 수 있습니다. 선택한 옵션은 상황에 맞게 사용자가 정할 수 있으며, 데이터베이스의 유연성을 통해 다양한 중복 처리 시나리오를 구현할 수 있습니다.