spring framework에서 MySQL, MariaDB 등을 이용하여 웹개발을 할 때 종종 발생하는 경우이다.
예를 들어 어떤 사이트 정보를 수집하여 db에 저장할 때 새로운 항목에 대해서만 insert를 실행하고 기존에 있던 자료는 새로운 값으로 update 해줘야하는 경우가 있다.
이 때 기존에 값이 있는지 판단하기 위해 select count(*) 쿼리를 먼저 실행하여 있는지 없는지 판단하는 방법이 있다.
또 다른 방법으로는 on duplicate key update 를 이용하는 것이다.
이 경우 table에 기본키(primary key) unique한 칼럼이 있어야 할 것이다.
예제 테이블 (도시의 온도를 기록하는 table)
create table test(
no int auto_increment primary key,
city varchar(60) not null unique,
temp int not null
)
no가 pk이고 city의 경우 중복이 허용되지 않는다.
이때 insert 쿼리를 다음과 같이 하면된다.
mybatis mapper의 경우
insert into test (city, temp) values(#{city}, #{temp})
on duplicate key update temp = #{temp}
일반 쿼리
insert into test (city, temp) values('서울', 20)
on duplicate key update temp = 20;
위와 같은 쿼리를 계속 실행하면 테이블에 해당 도시가 있을 경우 온도만 업데이트 되고 해당 도시가 없을 경우 새로운 도시와 온도가 인서트된다.
pk인 no는 어차피 중복될 일이 없어보인다. auto_increment라서
'dev' 카테고리의 다른 글
[Spring] 스프링에서 채팅 구현하기 (0) | 2018.04.18 |
---|---|
[Java] BigDecimal을 이용하여 반올림, 내림(버림), 올림 (1) | 2018.04.16 |
[git] 윈도우 github, bitbucket 사용자 변경 (0) | 2018.04.11 |
[Java/Spring] 스프링 파일 업로드, 출력 (0) | 2018.04.03 |
[Java] List<HashMap<String, Object>> 정렬하기 (0) | 2018.03.27 |
[Java] csv 파일 읽기 (0) | 2018.03.18 |
윈도우에 apache2, php 설치, 톰캣과 연동 (0) | 2018.03.11 |
[Java] 자바에서 윈도우 cmd 명령어 실행하기 (0) | 2018.03.04 |