본문 바로가기

반응형

개발/DB

(10)
[통계 쿼리] 재귀함수를 이용한 시간대별, 요일별, 일별, 월별 집계 쿼리 -나의 상황 : 통계 집계 화면에서 시간대별/요일별/일별/월별 테이블을 보여줘야함. 집계 테이블에 기준 값 별로 데이터가 모두 잘 들어가있으면 그대로 보여주면 되는데..데이터가 있을때만 집계테이블에 넣어주고 있어서 화면에 그대로 뿌려줄 수 없어서 아래 방법을 이용함.. - 시간대별 WITH RECURSIVE TIME_TB AS ( SELECT 0 AS TIME UNION ALL SELECT TIME + 1 FROM TIME_TB WHERE TIME < 23 ) SELECT CONCAT(LPAD(TIME_TB.TIME, 2, 0), ' ~ ', LPAD(TIME_TB.TIME+1, 2, 0))AS TIME , TIME_TB.TIME AS TIME2 , IFNULL(B.합1, 0) AS 합1 , IFNULL..
[MySQL] on duplicate key update (키 값 여부에 따른 insert / update) - 나의 상황 : 데이터 저장 시, 같은 KEY 값으로 등록된 데이터가 있으면 update / 없으면 insert 를 해줘야했음. 값이 있는지 확인 후 결과에 따라 insert or update 를 해도 되지만.. 더 간단하게 할 수 있는 방법이 있음! - 해결 : on duplicate key update 를 하면 간단하게 해결 INSERT INTO TEST_TABLE ( KEY_COL , COL_1 , COL_2 , RGST_DTM ) VALUES ( #{keyColVal} , #{col1Val} , #{col2Val} , NOW() ) ON DUPLICATE KEY UPDATE COL_1 = #{col1Val} , COL_2 = #{col1Val} , LAST_UPDT_DTM = NOW()
[MyBatis] Insert 후 Key 값 받아오기 (selectKey) - 나의 상황 : 마스터 테이블이 있고, 히스토리 테이블이 있다. 등록요청이 오면, 마스터 테이블에 insert 하고 그 키 값을 받아다가 히스토리 테이블에도 insert 를 시켜주어야한다. (마스터 테이블의 키 컬럼은 auto_increment 로 자동으로 넣어주고 있다.) 처음엔 마스터 테이블 등록 -> 마스터 테이블에서 등록된 키 값 조회 -> 히스토리 테이블 등록 이렇게 생각했는데.. 뭔가 계속 마음에 안들고.. 다른 방법이 있을 거 같고.. 해서 찾다가 알게 된 방법 selectKey! selectKey 를 사용하면 insert 요청 시 보낸 객체에 insert 후 생성된 키 값이 셋팅되어진다! - 사용법 1. MyBatis 쿼리에 useGeneratedKeys, keyProperty 작성! k..
[MySQL] mysql 에서 sequence 기능 nextval 사용하기. - 나의 상황 : 현재 진행하는 프로젝트에서 특정 테이블들의 키 컬럼은 auto_increment 를 설정할 수 없어 sequence 기능을 사용하기 위해 찾아보게 되었다. 우선 mysql 은 oracle 과 다르게 시퀀스 기능을 별도로 제공하지 않아서.. 이것저것 직접 설정해줘야 했다. - 설정 1. 시퀀스를 사용할 테이블 생성 CREATE TABLE sequences (NAME VARCHAR(32), CURRVAL BIGINT UNSIGNED) ENGINE = InnoDB 2. 시퀀스를 생성 할 프로시저 생성 DELIMITER $$ CREATE PROCEDURE `create_sequence` (IN the_name text) MODIFIESSQL DATA DETERMINISTIC BEGIN DELE..
[MySQL] not exists, exists 사용하여 insert/update 하기. - 나의 상황 : 등록/수정 요청 시, 키 값이 아닌 다른 컬럼의 중복여부를 체크하여 등록/수정 처리를 해줘야했음. 중복여부를 먼저 체크한 다음, 그 결과에 따라 등록요청을 한다면 서버에서 db로 쿼리를 두 번 요청해야하는데.. 다른 방법이 없을까 고민하다가 찾은 것! NOT EXISTS !!! * 나는 중복되지 않도록 존재하지 않을 때인 NOT EXISTS 를 사용했는데, 존재할때 무언가 넣고싶다면 EXISTS 를 사용하면 된다. - 사용방법 1. insert INSERT INTO TEST_TABLE ( col1, col2, col3) SELECT 'col1Val', 'col2Val', 'col3Val' FROM DUAL WHERE NOT EXISTS (select * from TEST_TABLE wh..
intelliJ 에서 springboot + cubrid 연결 시 만난 에러 : java.lang.UnsupportedOperationException] with root cause -나의 상황 : 멀티 DB 를 지원하기 위해 mysql 로 개발된 프로젝트에 cubrid 도 연동하다가 만난 에러. 구글링 시, resultType 문제라는 글이 대부분이었는데.. 나의 경우는 DB 변경 하다 발견한 거라 쿼리상 문제는 아닌 듯 했음. -원인 : 아래 링크보면 나오는데, 걍 큐브리드 문제였음. 큐브리드가 뭔갈 지원하지 않아서 그렇다고함.. 버전 10.1.3 이상은 문제가 해결되어있다고 함! http://www.cubrid.com/qna/3821250 CUBRID | Q&A - SPRING BOOT 2.X 버전연동 시 문제 * 질문 등록 시 다음의 내용을 꼭 기입하여 주세요. OS Window7 32bit, Linux 64bit 등 CUBRID Ver. [cubrid_rel] 수행 결과 C..
MyBatis 대량 데이터 INSERT - SqlSessionFactory 이용! 2022.02.21 - [개발/DB] - [Oracle] 대량 데이터 insert 하기. UNION ALL 사용. [Oracle] 대량 데이터 insert 하기. UNION ALL 사용. 나의 상황 : 대량의 데이터를 테이블에 insert 해야하는 상황. (대부분 1000건 정도의 데이터지만 간혹 10000건 이상의 데이터도 insert 해야함.) 생각 과정 : 1. service 단에서 for 문을 이용하여 insert 요 jy-note.tistory.com 위의 이전에 작성한 글을 보면 대량 데이터를 insert 하기 위해 노력을 했었는데.. 몇 만건 정도는 끄떡없었지만 이번에 테스트 데이터를 3000만건을 넣고 돌렸더니 문제가 생겼다..슬퍼.. 어쨋든 connection 이 여러번 생기니까 서버가 ..
[Oracle] 대량 데이터 insert 하기. UNION ALL 사용. 나의 상황 : 대량의 데이터를 테이블에 insert 해야하는 상황. (대부분 1000건 정도의 데이터지만 간혹 10000건 이상의 데이터도 insert 해야함.) 생각 과정 : 1. service 단에서 for 문을 이용하여 insert 요청 계속 날리기.. vs SQL 에 foreach를 사용하여 한번에 insert 하기. -> 적은 건수면 서비스로직에서 해도 상관없겠지만 건 수가 많으면 connection 문제가 생길 거 같았다. 속도차이도 많이 날 것이라 생각해서 패쓰. (직접 테스트해보신 글을 발견해 첨부한다. https://yzink.tistory.com/50 역시나 속도차이가 많이 난다!) 2. SQL 에서 foreach를 사용해서 한번에 insert 하겠다고 결정. 3. INSERT ALL ..

반응형