MySQL

MySQL - Error Code: 1062. Duplicate entry 가 나오는 이유 / 해결방법

Cong_S 2022. 5. 18. 17:57

기존 데이터의 모습

select * from user;

insert into user 
(email, password, name)
values
('abc@naver.com', '1234qwer',  '전호호' );

 

Error Code: 1062. Duplicate entry 가 나오는 이유에 대해 알아보자.

 

보통 이 경우는 컬럼 중에 하나가 unique 타입일 때 발생하게 된다.

해당 컬럼에 현재 입력된 데이터의 값이 이미 존재한다는 뜻이다. 

 

보통의 경우 중복값을 피하기 위해 다른 값을 입력하겠지만

 

때에 따라 중복값을 무시하고 진행해야할 때가 있으니

그 방법에 대해 알아보자.

 

1. ignore

INSERT IGNORE INTO user
(`email`, `name`) 
VALUES
('abc@naver.com', '전호호');

만약 중복이 발생한다면 지금 삽입하려는 ROW를 무시한 후에 기존의 ROW만 남기는 방식이다.

 

2. REPLACE INTO

REPLACE INTO user
(`email`, `name`)
VALUES
('abc@naver.com', '전호호');

기존의 ROW는 삭제되고 지금 실행하는 ROW가 삽입된다. (이 때문에 2 rows affected 가 나온다.)

따라서 Primary Key로 Auto Increment 옵션을 사용하고 있다면 값이 증가된 ROW가 남는다.

 

3. ON DUPLICATE KEY UPDATE

INSERT INTO user(`email`, `name`) 
VALUES('abc@naver.com', '전호호')
    ON DUPLICATE KEY UPDATE name =VALUES(`name`);

말 그대로 DEPLICATE KEY일 때는 UPDATE를 하라는 쿼리이다.

UPDATE할 필드를 지정할 수 있다.

원래의 ROW에 해당 필드만 UPDATE하기 때문에 Auto Increment 값은 변하지 않는다.