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
진실한 의식을 갖춘 영혼은 자신보다 훨씬 뛰어난 무엇을 발견할 줄 압니다. 칭찬이란 이해입니다. 근본적으로 누구나 위대하고 훌륭합니다. 누군가를 아무리 칭찬한다 해도 지나치지 않습니다. 타인 속에 있는 위대함과 아름다움을 발견하는 눈을 기르십시오. 《보여줄 수 있는 사랑은 아주 작습니다》 (칼릴지브란)