테이블에서 중복값 방지를 위한 contraint가 걸려있을 경우, 중복 키값을 가진 row를 insert 하면 오류가 발생한다.
따라서 일반적인 방법으로는 insert를 하기 전 중복된 키를 가진 값이 이미 table에 존재하는지를 파악하고, 이미 존재할 경우 update를 하도록 구현하여아 한다.
하지만, 중복키 여부를 확인하기 위한 로직을 작성하지 않고도 쿼리 하나로 insert 또는 update를 수행하도록 설정할 수 있는 방법이 존재한다.
MariaDB 공식 Document 를 참고하면, INSERT ON DUPLICATE KEY UPDATE
구문을 통해 처리할 수 있음을 확인할 수 있다.
Syntax
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [PARTITION (partition_list)] [(col,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col=expr
[, col=expr] ... ]
예제
아래 SQL은 ID
, NAME
, BIRTH
세 column을 가지며, PK로 ID
설정된 테이블 P
가 있다고 가정할 때
INSERT INTO P(ID, NAME, BIRTH) values('AAA', '홍길동', '2000-01-01')
ON DUPLICATE KEY UPDATE
NAME='홍길동',
BIRTH='2000-01-01'
위와 같은 쿼리를 작성할 수 있다.
ID
가 'AAA'인 데이터가 없을 경우 INSERT를 통해 ID
가 'AAA' 이며, NAME
이 '홍길동', BIRTH
가 '2000-01-01' 인 데이터가 삽입된다.
또한 이미 'AAA'인 데이터가 존재할 경우, UPDATE를 통해 NAME
을 '홍길동', BIRTH
를 '2000-01-01'로 설정하며, 이외의 값은 유지한다.
'DB' 카테고리의 다른 글
[Oracle] Key 중복 시 insert 대신 update 처리 (merge into) (0) | 2021.06.30 |
---|---|
[mysql/mariadb] Database export 하기 (db dump) (0) | 2019.06.21 |
[MSSQL] 외래키가 지정된 Table에 Truncate하기 (0) | 2019.05.18 |