본문 바로가기
프로그래밍/DB

MySQL 데이터가 없으면 INSERT 하고 있으면 UPDATE 하기

by 완소루피 2017. 5. 30.
728x90
반응형

MySQL 데이터가 없으면  INSERT 하고 있으면 UPDATE 하기


데이터를 입력 받아서 처리 할 때, SELECT로 데이터의 존재를 확인한 다음 INSERT를 할지, UPDATE를 할지 구분하여 처리했던 경우가 있는데, 한번의 쿼리로 데이터를 INSERT 또는 UPDATE 를 할 수 있는 방법이 있다.


이것이 INSERT INTO ON DUPLICATE KEY UPDATE 라는 것이다. 이것은 특정 컬럼에 Unique 하다는 제약조건이 있다면 그 키를 가지고 있는 데이터가 들어오면 INSERT를 실행하고, Unique 한 키 값이 이미 있을 경우에는 UPDATE를 수행하는 것이다.


다음 테이블을 보자. 아래와 같은 구조를 가진 테이블이 있다. UNIQUE 키는 login_id, reg_date 가 되겠다.






테이블에는 아래와 같은 데이터가 있다.


새로운 데이터로 'a', '2017-05-28' 의 중복되는 키값으로 데이터를 추가 또는 업데이트를 하려고 한다.




다음과 같은 SQL문을 수행한다. (중복된 데이터 입력)

INSERT INTO user_detail
(login_id, reg_date, work_exec, work_recv) VALUES ('a','2017-05-28',9,8)
ON DUPLICATE KEY UPDATE
work_exec=9, work_recv=8



다시 테이블의 데이터를 보게 되면  'a', '2017-05-28' 값은 UNIQUE 값이 중복되므로 UPDATE가 수행되었다.





이번엔 다음과 같은 SQL문을 수행한다. (새로운 데이터 입력)

INSERT INTO user_detail
(login_id, reg_date, work_exec, work_recv) VALUES ('a','2017-05-20',1,3)
ON DUPLICATE KEY UPDATE
work_exec=1, work_recv=3




다시 테이블의 데이터를 보게 되면  'a', '2017-05-20' 값은 중복되지 않는 데이터 이므로 INSERT가 수행되었는 것을 볼 수 있다.




728x90
반응형

'프로그래밍 > DB' 카테고리의 다른 글

Oracle에서 like 연산자  (0) 2018.04.09
Oracle에서 distinct  (0) 2018.04.09
Oracle에서 연결 연산자  (0) 2018.04.09
Oracle에서 Alias [별칭]  (0) 2018.03.27
Oracle에서 Insert / Select  (0) 2018.03.22