MySQL) ON DUPLICATE KEY UPDATE
본문 바로가기
Data Base/SQL

MySQL) ON DUPLICATE KEY UPDATE

by 조훈이 2022. 1. 4.

 ON DUPLICATE KEY UPDTAE 

중복된 Key 입력 시 이렇게 처리 해 주세요


  설명 

CREATE TABLE users (
      id INT NOT NULL PRIMARY KEY,
      name VARCHAR(20),
      addr VARCHAR(30)
);

INSERT INTO users VALUES
(1111, 'David', 'Songtan'),
(2222, 'Jihoon', 'Seoul'),
(3333, 'Yujin', 'Anyang');

  위와 같이 테이블 생성 및 data INSERT 를 하였다. 당연히 알고있는 것 이지만 중복되는 id값을 가지는 data의 삽입은 아래와 같이  불가능하다.

 

중복되는 Primary Key 값을 가지는 data의 삽입

  하지만 아래와 같은 방법들을 통해 중복되는 Primary key 값을 가지는 data에 대해서 처리 방식을 지정할 수 있다.

 

1. 중복시 그 data를 UPDATE

INSERT INTO users VALUES (1111, 'Laymond', 'Songtan')
ON DUPLICATE KEY UPDATE name = 'Laymond', addr = 'Songtan';

  Primary Key 값이 겹치는 경우에는 name 을 'Laymond'로, addr 을 'Songtan'으로 UPDATE 해 달라는 의미이다. Primary Key 값이 겹치지 않는 경우에는 UPDATE 가 실행되지 않는다. 위와 같이 실행을 한 뒤 users 테이블의 data들은 아래와 같다.

 

ON DUPLICATE 를 사용하여 INSERT된 users 테이블

 

  추가로 아래와 같은 방법으로도 위의 `ON DUPLICATE ~ UPDATE ~ ` 와 같은 역할을 수행할 수 있다.

 

REPLACE INTO users VALUES (1111, 'John', 'Suwon');

 

  `REPLACE INTO ~`를 통해 Primary Key 값이 겹치는 경우에는 기존의 data를 삭제한 뒤 위에 새로 추가하려는 data 가 삽입이 된다. 즉, `ON DUPLICATE ~` 와 같은 역할을 할 수 있을 것 이다.

 

REPLACE INTO 를 한 users 테이블

 

2. 중복시 해당 INSERT 구문을 무시

INSERT IGNORE INTO users values (2222, 'Ujin', 'Jeonju');

  `INSERT IGNORE INTO ~ ` 구문을 통해 중복되는 Primary Key 인 경우 현재 INSERT 구문을 무시할 수 있다. 위와 같은 문장을 실행한 결과 아래와 같은 결과가 나왔다.

 

ISNERT IGNORE INTO ~

  잘 실행이 되었지만 경고문구가 한 개 발생하였다. Primary Key가 중복되는 data가 1개 있기 때문이다. 그리고 users 테이블의 data를 확인해 본 결과 해당 INSERT 구문은 무시당해 아무 일도 일어나지 않은 것을 알 수 있다.

728x90

'Data Base > SQL' 카테고리의 다른 글

MySQL) IF, IFNULL, NULLIF, CASE ~ WHEN ~ END  (0) 2022.01.11
MySQL) WITH절을 이용한 비재귀적 CTE  (0) 2022.01.04
MySQL) 샘플 데이터 테이블 생성  (0) 2022.01.04
MySQL) AUTO_INCREMENT  (0) 2022.01.04
MySQL) 층간 합계 (ROLLUP)  (0) 2021.12.28

댓글