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에 대해서 처리 방식을 지정할 수 있다.
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 ~ UPDATE ~ ` 와 같은 역할을 수행할 수 있다.
REPLACE INTO users VALUES (1111, 'John', 'Suwon');
`REPLACE INTO ~`를 통해 Primary Key 값이 겹치는 경우에는 기존의 data를 삭제한 뒤 위에 새로 추가하려는 data 가 삽입이 된다. 즉, `ON DUPLICATE ~` 와 같은 역할을 할 수 있을 것 이다.
2. 중복시 해당 INSERT 구문을 무시
INSERT IGNORE INTO users values (2222, 'Ujin', 'Jeonju');
`INSERT IGNORE INTO ~ ` 구문을 통해 중복되는 Primary Key 인 경우 현재 INSERT 구문을 무시할 수 있다. 위와 같은 문장을 실행한 결과 아래와 같은 결과가 나왔다.
잘 실행이 되었지만 경고문구가 한 개 발생하였다. Primary Key가 중복되는 data가 1개 있기 때문이다. 그리고 users 테이블의 data를 확인해 본 결과 해당 INSERT 구문은 무시당해 아무 일도 일어나지 않은 것을 알 수 있다.
'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 |
댓글