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
'Database & Data > MySQL' 카테고리의 다른 글
MySQL 랭킹 함수 모음 (0) | 2023.07.03 |
---|---|
MySQL EVENT 간단 이해하기 (0) | 2023.07.03 |
MySQL 파티셔닝(Partitioning) (0) | 2023.06.28 |
MySQL 스크립트 실행하는 4가지 방법 소개 (0) | 2023.06.25 |
MySQL Root 계정 비밀번호 설정과 확인 방법(mysql_config_editor) (0) | 2023.06.25 |