📌중복 데이터를 관리하는 다양한 방법
신규 데이터의 INSERT시 Key로 지정된 값이 중복되는 데이터가 생기는 경우가 있다. 이러한 경우에 MySQL에서는 중복 데이터를 관리하는 세 가지 방법이 있다. 세 가지 방법은 다음과 같다.
- INSERT IGNORE
- ON DUPLICATED UPDATE
- REPLACE INTO
위의 세 가지 방법을 사용하여 중복 데이터를 관리하는 방법에 대해 자세히 알아보자.
📌테이블 생성
CREATE TABLE duplicatedTable
(
id VARCHAR(25),
name VARCHAR(20),
PRIMARY KEY (id)
);
🪓primary Key를 id로 지정한 후 key가 중복되는 데이터를 삽입해보자.
📌key가 중복되는 데이터 삽입
INSERT INTO duplicatedTable(id, name) VALUES (1000, '문OO');
INSERT INTO duplicatedTable(id, name) VALUES (1000, '차OO');
INSERT INTO duplicatedTable(id, name) VALUES (1001, '박OO');
📌결과
ERROR 1062 : Duplicate entry '1000' for key primary
🪓중복이되는 데이터의 삽입 시 위와 같은 에러가 발생한다.
📌INSERT IGNORE - 중복 데이터 관리
🪓INSERT IGNORE 구문을 사용하면 중복되는 키를 가지고 있는 데이터를 무시하고, 중복되지 않는 데이터만 삽입한다. 실제 대량에 데이터를 한번에 삽입해야 하는 경우 중복된 데이터를 방지하기 위해 사용되곤 한다.
2023.01.09 - [RDBS/MYSQL] - [MYSQL]INSERT - 여러 건 삽입
📌여러건의 데이터 삽입
INSERT IGNORE INTO duplicatedTable (id, name)
VALUES (1000, "문OO")
(1000, "차OO)
(1O01, "박OO)
(1003, "김OO);
ID | NAME |
1000 | 문OO |
1001 | 박OO |
1003 | 김OO |
🪓INSERT IGNORE를 사용하여 중복 데이터를 무시하고 데이터의 삽입이 가능하다.
📌INSERT INTO ... ON DUPLICATE KEY UPDATE - 중복 데이터 관리
🪓ON DUPLICATE KEY UPDATE 구문을 사용하면 신규 데이터 삽입 시, PRIMERY KEY나 UNIQUE KEY가 중복되었을 경우 지정 데이터를 UPDATE 할 수 있다.
📌테이블 생성
CREATE TABLE duplicatedTable
(
id VARCHAR(25),
name VARCHAR(20),
count INT #중복 데이터 카운트를 위한 컬럼
PRIMARY KEY (id)
);
📌데이터 삽입
INSERT INTO duplicatedTable VALUES ('1000', '문OO', 1)
ON DUPLICATE KEY UPDATE count = count + 1;
INSERT INTO duplicatedTable VALUES ('1000', '박oo', 1)
ON DUPLICATE KEY UPDATE count = count + 1;
INSERT INTO duplicatedTable VALUES ('1000', '차OO', 1)
ON DUPLICATE KEY UPDATE count = count + 1;
ID | NAME | COUNT |
1000 | 차OO | 3 |
🪓위의 테이블을 조회해보면 위와 같은 결과를 나타낸다. COUNT를 보면 총 두 번의 업데이트가 일어난 것을 확인할 수 있다. 즉, ON DUPLICATE KEY UPDATE의 설정으로 인해 중복 데이터 발생 시 COUNT 컬럼을 업데이트 하였다.
📌REPLACE INTO 구문 - 중복 데이터 관리
🪓REPLACE INTO 구문을 사용하면 신규 데이터 삽입시 중복된 데이터가 있는 경우 기존 데이터를 삭제 후에 신규 데이터를 삽입해준다. 사실 기존 데이터를 삭제하기 때문에 실무에서는 사용할 일은 없을 것 같다. 사용 예제는 다음과 같다.
📌REPLACE INTO - 예제
REPLACE INTO duplicatedTable VALUES ('1000', '문OO')
REPLACE INTO duplicatedTable VALUES ('1000', '박oo')
REPLACE INTO duplicatedTable VALUES ('1000', '차OO')
ID | NAME |
1000 | 차OO |
'RDBS > MYSQL' 카테고리의 다른 글
[MySQL]DATE_FORMAT을 이용한 날짜(일, 월, 년)별 통계(없는 데이터는 0처리 포함) (7) | 2023.04.07 |
---|---|
[MySQL]특정 범위 구하기(BETWEEN 구문) (4) | 2023.04.04 |
[MySQL]Like문법 - 특정 문자열 검색하기 (5) | 2023.02.13 |
[MySQL]CASE문의 기본 사용법 및 사용 시 주의 사항 (6) | 2023.02.06 |
[MySQL]그룹화 하고 조건 부여하기(Group By절, Having절) (1) | 2023.02.03 |