처음부터 시작하는 Java
  • INSERT ON DUPLICATE KEY UPDATE
    2022년 02월 28일 16시 18분 45초에 업로드 된 글입니다.
    작성자: 원2
    728x90
    반응형

     

     

    INSERT ... ON DUPLICATE KEY UPDATE 는 INSERT 문의 MariaDB/Mysql 확장문으로,

    중복된 고유 키 또는 기본 키를 찾으면 INSERT 대신 UPDATE를 실행한다.

     

    둘 이상의 고유 인덱스가 일치하면 첫 번째 인덱스만 업데이트 된다.

    따라서 둘 이상의 고유 인덱스가 있는 테이블에서는 이 문을 사용하지 않는 것이 좋다.

     

     


    예시

     

    CREATE TABLE food (id INT PRIMARY KEY, menu VARCHAR(30));
    INSERT INTO food VALUES (1,'라면'), (2,'쫄면'), (3,'밀면');

     

    기존의 키가 없다면 명령문이 그냥 insert 로 실행된다.

     

    INSERT INTO food VALUES (4,'김밥') 
      ON DUPLICATE KEY UPDATE menu='김밥';

     

    SELECT * FROM food;


     

    위의 상태에서 그냥 inset 문을 입력하면?

     

    INSERT INTO food VALUES (1,'냉면');

     

     

    1번의 primary key가 존재한다고 실행되지 않는다.

     

    그렇지만

    아래처럼 입력하면 1번 키에 값이 입력이 된다.

    INSERT INTO food VALUES (1,'소주') 
      ON DUPLICATE KEY UPDATE menu='소주';

     


    두개 이상의 행이 영향을 받을 때

     

    유니크 키를 추가

    ALTER TABLE food ADD id2 INT;
    UPDATE food SET id2=id+10;
    ALTER TABLE food ADD UNIQUE KEY(id2);

    이 상태에서

     

    INSERT INTO food VALUES (2,'맥주',13) 
      ON DUPLICATE KEY UPDATE menu='맥주';

     

    이런식으로 primary key 와 unique key가 해당되는 2개의 행이 영향을 받게 된다면

    아래처럼 둘중에 하나의 컬럼만 영향을 받게 되니 주의하자.

    그냥 두개의 행에 영향을 받게 하지 말자.

     

    728x90
    반응형

    'DB > MariaDB' 카테고리의 다른 글

    데이터 정규화  (0) 2024.03.22
    IFNULL  (0) 2022.02.17
    데이터베이스 사용자 비밀번호 변경 & 권한 관리  (0) 2022.02.11
    특정 DB 내에 존재하는 모든 컬럼 목록을 한번에 조회  (0) 2022.01.20
    더미데이터 넣기  (0) 2021.11.12
    BINARY (대소문자 구분)  (0) 2021.11.12
    댓글