[MySql] 중복값 입력시 처리 INSERT IGNORE INTO & DUPLICATE ON KEY UPDATE
컨텐츠 정보
- 13,947 조회
- 0 추천
- 목록
본문
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 구문에 써줄수 있다.
관련자료
-
링크