배경
사내 업무 중 테이블 여러 개 join 후 SELECT를 하여 특정 테이블에 insert 해야 하는 상황이 나왔는데 이때 중복된 데이터 즉 이미 들어가 있는 데이터는 중복처리를 해야 하는 상황이 왔다.
해당 테이블에 PK가 데이터를 구분할 PK는 아니였기 때문에 관련 정보를 찾아봤다.
방법
index 설정
먼저 index를 설정하여 중복을 피하는 방법인데 PK를 설정하거나 UNIQUE INDEX를 설정한다.
ALTER TABLE TableName ADD PRIMARY KEY (Column Name..)
ALTER TABLE TableName ADD UNIQUE INDEX (Column Name..)
ignore
말그대로 중복된다면 무시한다. 즉 insert를 하지 않는다.
이때 중복을 구분하려는 칼럼에 Index가 존재해야 한다.
INSERT IGNORE INTO TableName
duplicate key
중복될 상황이 올 때 어떠한 행동(ex: UPDATE, DELETE... 등)할지 설정할 수 있다. 트리거와 비슷하다고 볼 수 있다.
INSERT INTO TableName VALUES (데이터1, 데이터2....)
ON DUPLICATE KEY (중복 시 할 행동 설정);
replace
기존 데이터가 존재하면 DELETE 후 INSERT 한다. 그래서 AUTO_INCREMENT가 증가한다.
REPLACE INTO TableName VALUES (데이터1, 데이터2...);
정리
사실 replace는 실무에서 자주 사용하지 않을 것 같으므로 ignore와 duplicate key에 대해서 좀 더 찾아보았다.
duplicate key를 사용하는 게 더 좋은 경우는 중복 시 어떤 행동을 할 때이고
ignore를 사용할 때는 중복된 데이터에 대해 어떤 행동을 하고 싶지 않을 때인 듯하다.
<참고>
https://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update
https://umanking.github.io/2021/07/05/mysql-duplicate-record/
MySQL 중복데이터 관리방법 (INSERT IGNORE, ON DUPLICATE KEY UPDATE…)
MySQL에서 중복 데이터를 삽입하는 3가지 방법에 대해서 알아보자.
umanking.github.io
'데이터베이스 > RDB' 카테고리의 다른 글
[MySQL] 인덱스를 활용한 Join 성능 개선 (0) | 2022.09.22 |
---|
배경
사내 업무 중 테이블 여러 개 join 후 SELECT를 하여 특정 테이블에 insert 해야 하는 상황이 나왔는데 이때 중복된 데이터 즉 이미 들어가 있는 데이터는 중복처리를 해야 하는 상황이 왔다.
해당 테이블에 PK가 데이터를 구분할 PK는 아니였기 때문에 관련 정보를 찾아봤다.
방법
index 설정
먼저 index를 설정하여 중복을 피하는 방법인데 PK를 설정하거나 UNIQUE INDEX를 설정한다.
ALTER TABLE TableName ADD PRIMARY KEY (Column Name..)
ALTER TABLE TableName ADD UNIQUE INDEX (Column Name..)
ignore
말그대로 중복된다면 무시한다. 즉 insert를 하지 않는다.
이때 중복을 구분하려는 칼럼에 Index가 존재해야 한다.
INSERT IGNORE INTO TableName
duplicate key
중복될 상황이 올 때 어떠한 행동(ex: UPDATE, DELETE... 등)할지 설정할 수 있다. 트리거와 비슷하다고 볼 수 있다.
INSERT INTO TableName VALUES (데이터1, 데이터2....)
ON DUPLICATE KEY (중복 시 할 행동 설정);
replace
기존 데이터가 존재하면 DELETE 후 INSERT 한다. 그래서 AUTO_INCREMENT가 증가한다.
REPLACE INTO TableName VALUES (데이터1, 데이터2...);
정리
사실 replace는 실무에서 자주 사용하지 않을 것 같으므로 ignore와 duplicate key에 대해서 좀 더 찾아보았다.
duplicate key를 사용하는 게 더 좋은 경우는 중복 시 어떤 행동을 할 때이고
ignore를 사용할 때는 중복된 데이터에 대해 어떤 행동을 하고 싶지 않을 때인 듯하다.
<참고>
https://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update
https://umanking.github.io/2021/07/05/mysql-duplicate-record/
MySQL 중복데이터 관리방법 (INSERT IGNORE, ON DUPLICATE KEY UPDATE…)
MySQL에서 중복 데이터를 삽입하는 3가지 방법에 대해서 알아보자.
umanking.github.io
'데이터베이스 > RDB' 카테고리의 다른 글
[MySQL] 인덱스를 활용한 Join 성능 개선 (0) | 2022.09.22 |
---|