
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 값은 변하지 않는다.
'MySQL' 카테고리의 다른 글
| MySQL - SQL의 like 와 문자열 컬럼에 fulltext 설정을 하는 이유 (0) | 2022.05.18 |
|---|---|
| MySQL - 테이블의 unique 를 설정하는 방법 (0) | 2022.05.18 |
| MySQL - Null인 데이터를 찾는 방법과 Null 이 아닌 데이터를 가져오는 방법 : is (0) | 2022.05.17 |
| MySQL - group by에서 where 안 먹힐 때 해결방법! : having 사용 (0) | 2022.05.17 |
| MySQL - Join 과 Left Join하는 방법 (0) | 2022.05.17 |
댓글