Computer Science/💾 Database

[MySQL] 데이터 중복 삽입 방지하기

posted by sangmin

데이터 삽입 시 필요에 따라 중복 삽입을 방지해줘야 하는 경우가 있다. 지금 수행하고 있는 프로젝트에서 해당 문제에 직면했고, 어떤 방법을 적용하는 것이 좋을지 궁금해서 찾아봤다.

FROM DUAL NOT EXISTS

INSERT INTO User (userEmail, userPassword) SELECT ?, ? FROM DUAL
WHERE NOT EXISTS (SELECT * FROM user WHERE userEmail = "a@a.com", userPassword = 1234);

User 테이블에 해당 이메일과 패스워드를 가진 행이 없을 경우에 삽입해준다.

INSERT IGNORE

INSERT IGNORE INTO User (userEmail, userPassword) VALUES ("a@a.com", 1234);

ignore 뜻 그대로, 중복되면 무시한다.

REPLACE INTO

REPLACE INTO User (userEmail, userPassword) VALUES ("a@a.com", 1234);

원래 있던 데이터를 삭제하고 새로 들어온 데이터를 입력하는 것인데, 프라이머리 키로 자주 사용하는 인덱스 값이 변경할 수 있기 때문에 주의해서 사용해야 할 것 같다. 개인적인 생각으로는 매핑테이블에서만 쓰면 될 것 같다.

ON DUPLICATE KEY

INSERT INTO User (userEmail, userPassword) VALUES ("a@a.com", 1234)
ON DUPLICATE KEY [중복이 발생했을 경우 적용할 쿼리문];

ON DUPLICATE KEY를 사용하면 중복이 발생했을 경우의 추가적인 동작을 쉽게 구현할 수 있다.