MySQL에서 테이블에 레코드를 INSERT할 때, PK가 DUPLICATE 되는 현상이 번번히 일어난다.
- ex) 공간가격-날짜 복합키를 해당 테이블에 INSERT할 때, 중복일 경우
ERROR 1062 (23000): Duplicate entry 'SPAC00000001-2020-12-07' for key 'tb_guesthouse_price_calendar.PRIMARY'
따라서 위 와 같은 현상을 해결하고자 한다면,
해당 데이터를 INSERT하지 않거나, 해당 레코드를 UPDATE를 해야한다.
MySQL에서는 다음 3가지 방법으로 해결할 수 있다.
말 그대로 삽입(INSERT)하되, duplicate가 발생한다면, 해당 레코드는 무시하고 넘어가는 방법이다.
즉, ERROR를 무시하고 INSERT만 하는 명령어이다.
INSERT IGNORE INTO `USER`
(
email
, name
) VALUES
('test01@gmail.com', 'test01')
;
Query OK, 0 rows affected (0.00 sec)
말 그대로 삽입(INSERT)하되, duplicate가 발생한다면, 기존의 레코드는 삭제가 되고, 새로운 PK로 Auto Increment가 되어 새로운 레코드로 삽입한다.
REPLCATE INTO `USER`
(
email
, name
) VALUES
('test01@gmail.com', 'test01')
;
Query OK, 2 rows affected (0.00 sec)
역시 말 그대로 duplicate가 발생할 때, 해당 KEY에 대해서 수정(UPDATE)하는 명령어이다.
기존 레코드의 PK는 그대로 두고 UPDATE를 하기 때문에, REPLCATE INTO 처럼 PK가 새로 생성 될 필요 없다.
INSERT INTO `USER`
(
email
, name
, phone_number
) VALUES
('test01@gmail.com', 'test01', '01011112222')
ON DUPLICATE KEY UPDATE
name = 'test01'
, phone_number = '01011112222'
;
Query OK, 2 rows affected, 1 warning (0.00 sec)
MySQL 중복 레코드 처리방법 참고