본문 바로가기

Database

(20)
[MyBatis / MySQL] useGeneratedKeys, keyProperty, keyColumn * useGeneratedKeys="true" DB에서 자동 생성된 기본 키(PK)값을 Java 객체로 가져올 수 있는 MyBatis 설정.( JDBC의 getGeneratedKeys() 호출을 MyBatis가 자동으로 처리해준다 )* keyPropertyJava 객체 필드명* keyColumnDB테이블 컬럼명  INSERT INTO test_table (item_id, item_name, item_des) VALUES (#{itemId}, #{itemName}, #{itemDes})=> 해당 컬럼에 대한 AUTO_INCREMENT 설정 필요 (MYSQL) => keyProperty 와 keyColumn 각각 이름 일치여부 주의  insert 이후에 생성된 키(id)를 받아 바로 update를..
[MYSQL] ORDER BY column_name + 0 (형변환) 컬럼의 데이터 타입은 VARCHAR로 지정되어 있지만 데이터는 숫자로만 구성된 경우,데이터를 숫자기준 오름차순으로 정렬하고 싶다면 int타입으로 변환 후 정렬해줘야 한다.ORDER BY column_name + 0 ORDER BY column_name * 1=> 암시적 형 변환(Implicit Type Conversion)ORDER BY column ASC  로 정렬하는 경우111 2 21 ...위같은 순서로 정렬된다. + 0 이나 * 1 을 붙여주는게 가장 빠른 방법!
[SQL] RANK(), DENSE_RANK() * RANK()동일한 순위가 부여된 경우, 다음 순위를 건너뛴다.  * DENSE_RANK()동일한 순위가 부여된 경우, 다음 순위를 건너뛰지 않고 연속적으로 부여한다.. ex) SELECT seq, total_sales, RANK() OVER (ORDER BY total_sales DESC) AS rank, DENSE_RANK() OVER (ORDER BY total_sales DESC) AS dense_rankFROM sales; 결과는 아래와 같다.seq total_sales rank dense_rank 170011250022350022430043530043 => 동일한 값 2번, 3번에 대해 동일한 순위 2를 부여. RANK() 는 중복된 데이터 수만큼 순위를 건너..
[SQL] INSERT INTO ... SELECT 구문 (Dual 테이블) * DUAL : 특수한 단일 행 테이블.=> 데이터를 조회할 대상이 없을 때, 테이블 없이 간단한 연산이나 함수 결과를 반환할 떄 사용. ex) 테이블 없이 상수, 연산결과 등을 반환.// 상수 반환SELECT 'Hello World' FROM DUAL; SELECT 1 FROM DUAL;// 함수 결과 반환SELECT SYSDATE FROM DUAL;// 연산 수행SELECT 2 + 3 FROM DUAL;// 다중 행 반환SELECT 'Current Time: ' || TO_CHAR(SYSDATE, 'HH24:MI:SS') FROM DUAL; ** MySQL 에서는 FROM DUAL 생략 가능.SELECT 1;   * INSERT INSERT INTO table_name (column1, column2..
[오류] Data truncation: Invalid JSON text in argument 1 to function json_contains: "Invalid value." at position 0. Data truncation: Invalid JSON text in argument 1 to function json_contains: "Invalid value." at position 0.=> JSON 문법 오류  쿼리문의 having절 조건을 아래처럼 했더니 오류가 났다. (배열이 파라미터값을 포함하는지 확인하는 조건)having json_contains(json_arrayagg(info.user_cd), '"#{code}"')*** 숫자인 경우는 ' #{integer} ' 로만 감싸고, 문자열인 경우에는 ' "#{string}" ' 한번 더 감싸줘야 한다. JSON_CONTAINS 함수를 사용할 때, 검사할 배열과 비교대상 모두 JSON 형식이어야 한다.json_arrayagg 함수로 문자열 컬럼..
[오류] Parameter index out of range (2 > number of parameters, which is 1). Parameter index out of range (2 > number of parameters, which is 1). 전달되는 파라미터는 두개인데 SQL쿼리문에서 사용하는 건 하나여서 난 오류. 전달하는 파라미터에 code를 추가했는데 where절에 code = #{code} 추가를 안했다. with value as ( select entity_id , json_arrayagg( json_object( "id", id , "seq", seq , "text", text , "code", code )) as 'val' from (테이블1) where id = #{Id} and code = #{code} ) select /* 요기 주석 맨 끝 슬래쉬도 없어서 수정 후에도 같은 오류가 또 남 */ id a..
[MyBatis] foreach 태그 지원 옵션 * MyBatis foreach태그 (구 ibatis [ iterate ) collection : 전달받은 인자. List or Array 형태만 가능. item : 전달받은 인자 값을 alias명으로 대체. open : 구문이 시작될때 삽입할 문자열. close : 구문이 종료될 때 삽입할 문자열. separator : 반복 되는 사이에 출력할 문자열. index : 반복되는 구문 번호. 0부터 순차적으로 증가. SELECT * FROM users WHERE id IN #{itemId} 즉, idList = {ID1, ID2, ID3, ID4...} 이런식으로 데이터가 들어있으면 SELECT * FROM users WHERE id IN (ID1, ID2, ID3, ID4, ...) 위같은 형태가 되는거다.
[DB기초] 옵티마이저, 테이블 스캔 방식 * 옵티마이저 (optimizer) SQL쿼리를 실행할 때 가장 효율적인 처리 경로를 생성해주는 컴포넌트 - 규칙 기반 옵티마이저 (Rule-Based Optimizer, RBO) 정해진 규칙의 우선순위에 따라 실행 방법을 결정. => 조인 여부, 종류 / 인덱스 여부 등 - 비용 기반 옵티마이저 (Cost-Based Optimizer, CBO) 가능한 실행 경로들 중 최소한의 비용을 가지는 경로를 선택. => DBMS의 통계정보 활용 (테이블, 컬럼, 인덱스, I/O, CPU성능 등) * 참고블로그 * https://coding-factory.tistory.com/743 [DB] 데이터베이스 옵티마이저(Optimizer)에 대하여 옵티마이저(Optimizer)란? 옵티마이저는 가장 효율적인 방법으로 S..