ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MYSQL] INSERT 중복 데이터 관리 방법 <INSERT IGNORE / REPLACE INTO /ON DUPLICATE KEY UPDATE>
    오늘의 IT/MYSQL 2023. 2. 2. 23:46
    반응형

     

    데이터를 INSERT 할 시 중복되는 데이터가 있는 경우 사용하는 명령문

     

    공통사항

    해당 명령문은 모두 중복되는 칼럼 체크를 PRIMERY KEY나 UNIQUE KEY로 하기 때문에 해당 키가 없는 경우 INSERT 로직을 수행함

    중복값이 없는 경우에는 모두 INSERT 로직을 수행함

     

    • INSERT IGNORE
    INSERT IGNORE INTO user_info (memo , name, cp) SET memo = 'hi', name = '대장' , cp = '010-0000-0000';

    결과

    Query OK, 0 row affected

     

    - Unique index 키로 되어 있으면 일반적으로 중복 데이터가 들어가는 경우 에러가 나지만 "IGNORE" 명령문을 통해 에러가 무시되어 결과적으로 무시됨

    - IGNORE은 실행이 안 되고 넘어가기는 것이기 때문에 "AUTO_INCREMENT"의 값이 변경되지 않는다

     

    • REPLACE INTO
    REPLACE INTO user VALUES (NULL, '대장', '12');
    REPLACE INTO user VALUES (NULL, '대장', '20');
    REPLACE INTO user VALUES (NULL, '대장', '8');
    REPLACE INTO user VALUES (NULL, '대장', '16');

    결과

    id name age
    4 대장 16

     

    - Primary Key나 Unique Key 가 없다면 INSERT 를 사용해야함

    - Primary Key가 같은 데이터가 있다면 기존 데이터를 삭제(DELETE)하고 새로 INSERT 하므로 "AUTO_INCREMENT" 키가 있다면 중복 값이 들어가면 해당 키 값이 증가함 -> Primary Key를 제외하고 다른 값은 갱신됨

    - 중복되는 데이터가 없으면 INSERT 와 동일하게 작동함, 다만 INSERT 는 Primary Key 가 중복으로 들어오면 에러남

     

    • ON DUPLICATE KEY UPDATE
    INSERT INTO user_food VALUES (NULL, '대장', '피자') 
    ON DUPLICATE KEY UPDATE meal = VALUES(meal);
    
    INSERT INTO user_food VALUES (NULL, '대장', '라면') 
    ON DUPLICATE KEY UPDATE meal = VALUES(meal);
    
    INSERT INTO user_food VALUES (NULL, '대장', '족발') 
    ON DUPLICATE KEY UPDATE meal = VALUES(meal);

     

    결과

    id name food
    1 대장 족발

     

    - 중복 데이터가 들어오는 경우 지정한 레코드 데이터를 업데이트 시킴

    반응형
Designed by Tistory.