×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 2,588,392명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
반응형

INTRO

 

member라는 테이블을 생성 후, 중복 저장을 막기 위해 name에 unique(or primary key)키를 등록한다.

데이터베이스에서 대량의 데이터를 등록할 경우, 키 값이 있음에도 Insert문을 실행하게 되면 에러가 발생한다. 해결방법으로 테이블에 있는 데이터를 모두 삭제한 후 다시 집어넣는 방법이외에도 많겠지만 그것은 번거롭기도하며 위험요소도 생긴다. 

따라서 키값이 있는 경우는 Insert가 아닌 Update를 해주는 방법을 사용하면 번거로운 일도 줄이고 에러도 줄일 수 있다.

 

 

테이블 준비

 

테이블을 생성 후, 중복 저장을 막기 위해 name에 unique(or primary key)키를 등록한다.

DROP TABLE member;
CREATE TABLE member (
     name VARCHAR(30)
    ,job VARCHAR(30)
);
ALTER TABLE member ADD UNIQUE (name);

 

 

ON DUPLICATE KEY UPDATE 사용 

INSERT INTO member (
      name
    , job
) VALUES (
      'CROCUS'
    , '개발자'
)
ON DUPLICATE KEY UPDATE
    job = '실무자';
 

위의 쿼리를 총 2번 실행해보자.

 

처음에는 CROCUS라는 name이 테이블에 없으므로 중복값 처리 없이 그대로 CROCUS, 개발자가 들어갈 것이다.

하지만 두번째 쿼리때는 CROCUS가 존재하므로 개발자->실무자 로 업데이트 되어 테이블에 들어가게 될 것이다. 

 

반응형
  1. suhwanc 2022.01.21 12:49 신고

    안녕하세요 항상 잘 읽고 있습니다!
    글을 읽다가 하나 궁금한 점이 있는데요! 저렇게하면 (crocus, 개발자)로 저장하고 싶었는데 저장하고나니 의도치않게 실무자가 되어버린 경우도 생길 것 같은데 실무에서 duplicate update를 사용하는 사례나 예시를 알 수 있을까요??

    • 가누 2022.01.22 09:25

      db에서 학번이 기본키로 레코드가 저장되어있는 상태에서 학생의 성적이 A였는데 교수의 실수로 A+로 정정되어야할 때, 특정학생의 성적이 입력되지 않았을따 저런 upsert 코드를 사용 할 수있습니다.

    • suhwanc 2022.01.22 12:59

      아하 바로 이해됐습니다! 감사합니다!~