Database

[MySql] 중복값 입력시 처리 INSERT IGNORE INTO & DUPLICATE ON KEY UPDATE

페이지 정보

본문

INSERT IGNORE INTO - 


데이터가 이미 있으면 따로 후속처리없이


그냥 아무행위도 안하고 나머지 데이터들만 INSERT를 진행하고자할 때


INSERT INTO 구문에 IGNORE을 추가해주면 된다.


해당 구문은 다음과 같다


INSERT IGNORE INTO [TABLE] (COLUMN1, COLUMN2, ...)

VALUES (VALUE1, VALUE2, ...)


기존 INSERT INTO 사이에 IGNORE을 추가해주기만 한거라


구문 자체는 매우 간단하다.


예)


CREATE TABLE MINE(

id VARCHAR(10) PRIMARY KEY,

name VARCHAR(10),

salary NUMBER

) 


가볍게 테이블 하나 있다 치고


INSERT IGNORE INTO MINE VALUES ("CD2""HAN"20000)


위의 쿼리를 그대로 실행하면


id

name 

salary 

 CD2

HAN 

20000 

 

이러한 결과가 나오며



INSERT IGNORE INTO MINE VALUES ("CD2""PARK"40000)


해당 쿼리를 한번 더 실행하면


id

name 

salary 

 CD2

HAN

20000

 

이미 PK값이 있기때문에 에러는 발생하지 않고 


IGNORE 뜻과 마찬가지로 데이터를 INSERT 하지 않는다.


그래서 결과는 그대로이다.



----------------



- DUPLICATE ON KEY UPDATE  - 


데이터가 있으면 UPDATE 없으면 INSERT 처리


 제어할 수 있는 DUPLICATE ON KEY UPDATE 구문


어찌 보면 오라클의 MERGE INTO 구문과 비슷하다고 느껴진다.


해당 구문에 대해 알아보자

 

INSERT INTO [TABLE] (COLUMN1, COLUMN2, ...)

VALEUS (VALUE1, VALUE2, ...)

ON DUPLICATE KEY

UPDATE (COLUMN1 = VALUE1 , COLUMN2 = VALUE2, ...)

 

기존 INSERT INTO 구문에 뒷부분에 추가해서 써주기만하면 된다.


성능면에서도 괜찮은 구문이라는 말이 많다.


예)


CREATE TABLE MINE(

id VARCHAR(10) PRIMARY KEY,

name VARCHAR(10),

salary NUMBER

) 

 

간단하게 테이블 하나를 만들어놓고 시작해보자


INSERT INTO MINE VALUES ("CD2", "HAN", 20000)

ON DUPLICATE KEY

UPDATE name = "KIM" , salary = 300000 


위의 쿼리를 그대로 실행하면


id

name 

salary 

 CD2

HAN 

20000 

 

이러한 결과가 나오며


해당 쿼리를 다시한번 실행하게 되면


id

name 

salary 

 CD2

KIM

300000

 

이런식으로 값이 변한것을 확인이 가능하다.



추가적으로 실험은 해보지 않았지만


key 필드 값 역시 뒤에 UPDATE 구문에 써줄수 있다.



관련자료

등록된 댓글이 없습니다.
Today's proverb
믿음은 기다리는 것이 아닐가 행동이다. 진정한 믿음을 가졌다면 지금 곧 행동하라.