본문 바로가기
Programming/SQL

mysql 입력시 중복 데이터

by Chan_찬 2014. 7. 17.
728x90
반응형

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')


1)
insert
 into net_point

(s_nb_1st,s_nb_2nd,note,rg_dt,rg_id,up_dt,up_id)
values ('7117' , '6667', '테스트 ' ,now(),'id' ,now(), 'id')

where not exists( select * from net_point 

                 where s_nb_1st = '7117' and s_nb_2nd = '6667');

 

2)
insert
 into net_point

(s_nb_1st,s_nb_2nd,lv_cd,importance,note,rg_dt,rg_id,up_dt,up_id)
select '7117' ,'6667' ,' 테스트 ' ,now(),'id' ,now(), 'id' from dual

where not exists( select * from net_point

                 where s_nb_1st = '7117' and s_nb_2nd = '6666');


 1번과 같이 하면 syntax 오류 발생한다.

2번과 같이 해야 한다.
다른 점은 밑줄로 되어 있다.


728x90
728x90
BIG
Buy me a coffeeBuy me a coffee

댓글