목록Dev./database (5)
Dong Log
여러 용도로 데이터베이스(이하 DB)에 데이터를 insert 한 후, auto_increment 된 키 값을 바로 알고 싶은 경우가 있습니다. 다음 예제는 mybatis 라이브러리로 DB의 User테이블에 'NO' 라는 auto_increment 의 key 칼럼이 있을때 작성법 입니다. // spring framework 기준 // Vo 작성 public class UserVo { Long no; String userId; //... getter setter } @Service public class UserService { @Autwired private UserRepo userRepo; UserVo user = new UserVo(); // String no; String user.setUserId(..
같은 MYSQL의 데이터베이스에서 일부 테이블의 데이터를 검색 후에 다른 데이터베이스 테이블에 INSERT 하고 싶은 부분이 생길 수 있다. 나같은 경우는 회사 사내 DB(데이터베이스)에서 일부 데이터를 빈번히 재사용하고 있는데, 위와 같은 경우가 간혹 생기곤한다. 특정 데이터를 JOIN하여 가져온다던가 CRON을 통해 데이터 동기화를 시키고 싶다던가 하는 예이다. 기본적으로 여러 INSERT를 하기 위해서는 아래와 같이 SQL을 작성한다. (링크) INSERT INTO test_tbl(NAME) VALUES ('운영자5'), ('운영자6'), ('운영자7'); 일부 테이블의 데이터를 검색 후에(SELECT) 다른 데이터베이스 테이블에 INSERT하는 방식은 VALUES 부터 바꿔주면 된다. INSERT..
쿼리를 작성할때, 날짜를 원하는 폼에 맞게 변경하는 일은 자주 있는 일이다.그때마다 date format을 찾아보곤 하는데 이참에 적어 놓으려고 한다. 사용 예시 - DATE_FORMAT('date 칼럼 이름', %Y-%m%d), 결과: 2019-02-19 %Y연4자리 연도%y연2자리 연도%m월2자리 (00-12)%c월1자리, 10보다 작을경우 (1-12)%M월이름(January, February…)%b월줄인 이름(Jan, Feb…)%d일2자리 (00-31)%e일1자리, 10보다 작을경우 (0-31)%D일1st, 2nd…%H시24시간 형식 (00-23)%h시12시간 형식 (01-12)%I시12시간 형식 (01-13)%k시24시간 형식, 10보다 작을경우 한자리 (0-23)%l시12시간 형식, 10보다 작..
관계형 데이터베이스(RDB) 에서 1:M 의 관계를 가질 경우 INSERT를 여러번 해야하는 경우가 있다. 그럴때 아래와 같이 INSERT문 한줄 한줄을 수행하는것이 아닌, 하나의 INSERT 쿼리로 한번에 가능하다. - 기존 insert 1개씩 쿼리를 수행할때 INSERT INTO test_tbl(NAME) VALUES('운영자1'); INSERT INTO test_tbl(NAME) VALUES('운영자2'); INSERT INTO test_tbl(NAME) VALUES('운영자3'); .... - 한번의 INSERT 문으로 한번에 수행할때 INSERT INTO test_tbl(NAME) VALUES ('운영자5'), ('운영자6'), ('운영자7'); 간결하고 좋다!
비즈니스 로직에서 기존에 존재하는 데이터를 확인한 후에 insert 쿼리를 수행하면서 이 과정을 한 쿼리에서 진행할 수 없을까? 해서 찾아봤는데 아래와 같이 처리할 수 있었다. INSERT INTO TEST_TBL(name) SELECT 'test' FROM DUAL WHERE NOT EXISTS (SELECT name FROM TEST_TBL WHERE name='test'); 기존에 존재하는 데이터를 확인 후에 insert 쿼리를 수행한다면 비즈니스 로직과 두번의 쿼리를 수행하여 효율적이지 못하다. 따라서 이같이 쿼리도 줄이고 비즈니스 로직을 줄일수 있는 효과를 얻을 수 있다. 마지막으로 생소한 부분을 집고 넘어가자 - NOT EXISTS 예약어 : 서브쿼리에만 사용할수 있는 예약어로 단순값에 사용할..