MySQL에서 Insert할때 not exists를 이용하여 동일한 데이터가 없을 경우만 입력하는 방법
서론
Oracle에서는 exists라는 예약어가 있듯 MySQL에서도 exists와 not exists 라는 예약어가 있다. 이 예약어는 스카마에 데이터가 포함되어 있는지 또는 없는지를 확인하는데 사용되는 목적에 사용된다. not exits를 잘 활용하면 데이터를 입력할 때 중복된 되이터는 입력하지 않게 처리할 수 있다. 제약 조건을 이용하면 제약조건이 맞지 않는다는 에러나 예외처리를 해야하는데 not exists를 이용하면 이런 제약조건 위반없이 데이터를 유일하게 입력할 수 있다.
INSERT INTO table (field)
SELECT 'value' FROM DUAL
WHERE NOT EXISTS (SELECT * FROM table WHERE field='value')
실제 예를 들어서 RssItems라는 테이블 안에 link값을 저장하는데 http://blog.saltfactory라는 한번 저장된 link가 있는 경우는 입력하지 않게하려고 할때 다음과 같이하면 된다.
INSERT INTO RssItems (link)
SELECT 'http://blog.saltfactory.net' FROM DUAL
WHERE NOT EXISTS (SELECT * FROM RssItems WHERE link='http://blog.saltfactory.net')
참고
- http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html
연구원 소개
- 작성자 : 송성광 개발 연구원
- 블로그 : http://blog.saltfactory.net
- 이메일 : saltfactory@gmail.com
- 트위터 : @saltfactory
- 페이스북 : https://facebook.com/salthub
- 연구소 : 하이브레인넷 부설연구소
- 연구실 : 창원대학교 데이터베이스 연구실