반응형

구문

 기존 데이터가 없으면

기존 데이터가 있으면 

 INSERT IGNORE

데이터 입력 

row affected 1

무시

row affected 0 

 REPLACE INTO

데이터 입력 

row affected 1

기존 데이터 삭제 후 입력
row affected 2

AUTO_INCREMENT 필드가 있다면 값이 바뀝니다.

 ON DUPLICATE UPDATE

데이터 입력 
row affected 1

기존 데이터 수정
row affected 2




<Create Script>

1
2
3
4
5
6
CREATE TABLE `CAR` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `COLOR` VARCHAR(45NOT NULL,
  `NUMBER` VARCHAR(45NOT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE INDEX `NUMBER_UNIQUE` (`NUMBER` ASC));


** 주의 사항 : Primary Key 혹은 Unique Index 필드를 기준으로 중복 체크를 하게 됩니다.


<Data Insert> - 최초 데이터 입력

1
2
INSERT INTO CAR (COLOR, NUMBER) VALUES ('RED''1234');
INSERT INTO CAR (COLOR, NUMBER) VALUES ('BLUE''7777');


<Result> 

IDCOLORNUMBER
1RED1234
2BLUE7777

* 각각 1 row affected



<Data Insert Ignore> - INSERT IGNORE 중복 입력

1
2
INSERT IGNORE INTO CAR (COLOR, NUMBER) VALUES ('RED''1234');
INSERT IGNORE INTO CAR (COLOR, NUMBER) VALUES ('BLUE''7777');



<Result> 

IDCOLORNUMBER
1RED1234
2BLUE7777

* 각각 0 row affected

* 데이터 변화 없음.



<Data Replace> - Replace 중복 입력

1
2
REPLACE INTO CAR (COLOR, NUMBER) VALUES ('RED''1234');
REPLACE INTO CAR (COLOR, NUMBER) VALUES ('BLUE''7777');


<Result> 

IDCOLORNUMBER

5

RED1234

6

BLUE7777

* 각각 2 row affected - 기존에 데이터가 없으면 1 있으면 2 row affected

* ID값이 mysql ver 5.1.73 에서는 3, 4, mysql ver 5.6 에서는 5, 6이 된다. INSERT IGNORE 에서 Auto Increment 되는지 여부가 달라지는 것 같다.



<Data Insert On Duplicate Key Update> - Insert On Duplicate Key Update 중복 입력

1
2
INSERT INTO CAR (COLOR, NUMBER) VALUES ('RED''1234'ON DUPLICATE KEY UPDATE COLOR='PINK';
INSERT INTO CAR (COLOR, NUMBER) VALUES ('BLUE''7777'ON DUPLICATE KEY UPDATE COLOR='GREEN';


<Result> 

IDCOLORNUMBER

5

PINK1234

6

GREEN7777

* 각각 2 row affected - 기존에 데이터가 없으면 1 있으면 2 row affected

* ID 값은 변화가 없고 COLOR만 UPDATE 되었다.



이곳에서 테스트 및 확인이 가능합니다.

http://sqlfiddle.com/#!9/9fd7b7/1


반응형

+ Recent posts