RDBS/MYSQL

[MySQL]중복 데이터를 관리하는 다양한 방법(INSERT IGNORE, ON DUPLICATED UPDATE, REPLACE INTO)

MoonSta 2023. 3. 27. 08:57

📌중복 데이터를 관리하는 다양한 방법

 신규 데이터의 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 - 여러 건 삽입

 

[MYSQL]INSERT - 여러 건 삽입

INSERT - 단건 삽입 INSERT 기본 문법은 다음과 같다. -- Column 생략X INSERT INTO 테이블A (Column1, Column2, ..ColumnN) VALUES (Value1, Value2, ...ValueN) -- Column 생략O (컬럼과 값의 순서가 일치해야 함) INSERT INTO 테이블

mooonstar.tistory.com

 

📌여러건의 데이터 삽입

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