개발로 자기계발
728x90

이 구문은 새로운 레코드를 삽입하려고 할 때, 이미 존재하는 고유 키(Unique Key) 또는 기본 키(Primary Key)에 대한 충돌이 발생하면, 지정된 열을 업데이트하는 기능을 한다.

예를 들어, users테이블이 있고, 각 사용자는 고유한 이메일 주소를 가지고 있다고 가정해 보자. 만약 새로운 사용자를 추가하려고 하는데, 해당 사용자의 이메일이 이미 테이블에 존재한다면, "ON DUPLICATE KEY UPDATE"를 사용해서 이미 존재하는 레코드를 업데이트하거나, 새로운 레코드를 추가하지 않고 기존 레코드를 유지할 수 있다.

INSERT INTO users (email, age) VALUES ('test@example.com', 20) 
ON DUPLICATE KEY UPDATE age=VALUES(age);

이 쿼리는 다음과 같이 동작한다:


1. 새 사용자의 이메일(test@example.com)이 users 테이블에 존재하는지 확인한다.
2. 만약 해당 이메일이 테이블에 없다면, 새 사용자 정보(email: test@example.com, age: 20)가 삽입됩니다.
3. 만약 해당 이메일이 이미 테이블에 있다면, 존재하는 레코드의 'age' 필드가 새로운 값(20)으로 업데이트됩니다.

따라서 "ON DUPLICATE KEY UPDATE"는 고유 키 충돌을 자연스럽게 처리하면서, 테이블의 데이터를 쉽게 유지할 수 있는 방법을 제공한다.


위와 같이 이메일이 기준이라면 이메일 필드에는 Unique Key or Primary Key가 조건으로 존재해야 한다.

 

728x90
SMALL
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)