[sql] SQL INSERT 문에서 기존 레코드 대체 방법

보통 SQL INSERT 문은 새로운 레코드를 데이터베이스에 추가할 때 사용됩니다. 그러나 때때로 존재하는 레코드를 대체하고자 할 때가 있습니다. 이때는 INSERT 문을 사용하여 기존 레코드를 업데이트하는 방법을 사용할 수 있습니다.

1. ON DUPLICATE KEY UPDATE 구문 사용

MySQL에서는 ON DUPLICATE KEY UPDATE 구문을 사용하여 기존 레코드를 업데이트할 수 있습니다. 이 구문을 사용하면 새로운 레코드를 추가하려고 할 때 기본 키 또는 고유 제약 조건이 있는 경우 기존 레코드를 업데이트하게 됩니다.

예시:

INSERT INTO table_name (column1, column2) VALUES (value1, value2) ON DUPLICATE KEY UPDATE column2 = value2;

위의 예시에서 table_name은 테이블의 이름, column1, column2는 열의 이름, value1, value2는 삽입하고자 하는 값입니다. 이때 column1이나 column2가 고유 제약 조건을 가지고 있을 경우, 새로운 레코드가 삽입되지 않고 기존 레코드가 업데이트됩니다.

2. REPLACE INTO 문 사용

다른 방법으로 MySQL에서는 REPLACE INTO 문을 사용하여 기존 레코드를 대체할 수 있습니다. REPLACE INTO 문은 동일한 기본 키 또는 고유 제약 조건을 가진 레코드가 있는 경우, 기존 레코드를 삭제하고 새로운 레코드로 대체합니다.

예시:

REPLACE INTO table_name (column1, column2) VALUES (value1, value2);

3. INSERT … ON CONFLICT DO UPDATE 문 사용

PostgreSQL에서는 INSERT ... ON CONFLICT DO UPDATE 구문을 사용하여 기존 레코드를 업데이트할 수 있습니다. 이 구문을 사용하면 삽입하려는 레코드가 기존 레코드와 충돌할 경우, 지정된 업데이트 작업을 수행합니다.

예시:

INSERT INTO table_name (column1, column2) VALUES (value1, value2) ON CONFLICT (constraint_column) DO UPDATE SET column2 = value2;

위의 예시에서 constraint_column은 충돌을 확인할 때 사용되는 열의 이름입니다.

결론

기존 레코드를 삽입하는 과정에서 해당 기능을 지원하는 DBMS마다 약간의 차이가 있을 수 있습니다. 따라서 사용하고 있는 데이터베이스 시스템의 문서를 참고하여 적절한 방법을 사용하는 것이 중요합니다.