프로그래밍 언어

    [DB] MySQL 샘플 데이터

    [DB] MySQL 샘플 데이터

    MySQL 을 공부하다보면 데이터 샘플이 필요할 때가 있는데 MySQL 홈페이지에서 제공하는 데이터가 있다. https://dev.mysql.com/doc/index-other.html 데이터 다운로드 Employee 데이터를 GitHub에서 다운받을 수 있다. $> unzip test_db-master.zip $> cd test_db-master/ 압축을 풀고 엔진 세팅을 해준다. set storage_engine = InnoDB; -- set storage_engine = MyISAM; -- set storage_engine = Falcon; -- set storage_engine = PBXT; -- set storage_engine = Maria; git clone 으로도 사용이 가능하다. Inte..

    [SQL 튜닝] 옵티마이저(optimizer)

    옵티마이저란? SQL을 가장 빠르고 효율적으로 수행할 최적(최적비용)의 처리 경로를 생성해주는 DBMS 내부의 핵심엔진이다. 개발자가 SQL을 작성하고 실행하면 즉시 실행되는 것이 아니라 옵티마이저에서 해당 쿼리문을 어떻게 실행시킬지 실행계획을 세우고 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떻게 분포 되어있는지 참조하고 데이터를 기반으로 최적의 실행 계획을 처리해준다. 옵티마이저 종류 옵티마이저는 실행 계획을 세우는 방식에 따라 규칙 기반 옵티마이저와 비용 기반 옵티마이저로 나뉜다. 규칙 기반 옵티마이저 실행 속도가 빠른 수능로 규칙을 먼저 세워두고 우선순위가 앞서는 방법을 채택하는 것이다. 과거에 옵티마이저의 비용 예측하는 능력이 좋지 않아 해당 방식을 사용했었다. 우선순위는 다음과 같다..

    [MySQL] InnoDB란

    [MySQL] InnoDB란

    MySQL 엔진 MySQL은 주로 MyISAM, InnoDB 두가지 스토리지 엔진중 하나를 사용한다. MyISAM, InnoDB 차이 및 사용하면 좋을 이유 MyISAM Read Only 기능이 많은 서비스 트랜잭션이나 복구가 필요 없는 경우 한번에 대량 데이터를 입력하는 배치성 테이블 InnoDB 대용량 데이터를 다룸 트랜잭션 처리나 복구가 필요함 오라클과 비슷한 기능들을 제공함 메모리 캐시를 통한 퍼포먼스 향상 InnoDB 아키텍처 InnoDB In-memory구조로 데이터와 인덱스를 메모리에 캐싱하기 위해 "버퍼풀" 이라는 저장 영역을 유지 관리 한다. InnoDB의 장점 1. 성능 다수의 사용자 동시 접속 가능 대용량 데이터 처리 테이블과 인덱스를 테이블 스페이스에 저장하고, 테이블 스페이스는 파..

    [MySql] 다른 테이블과 조인해서 UPDATE 하는 방법

    select 문에서 join 해서 값을 찾아서 사용하듯이 다른 테이블과 조인해서 현재 테이블에 해당하는 값만 UPDATE를 하고 싶었다. member, company 두개의 테이블이 있을때 멤버 테이블에 회사명을 추가하고 싶었다. UPDATE member m, company c set m.company_name = c.company_name where m.company_id = c.id update 문에 조인하고 싶은 테이블을 나열한다. set 에는 값을 업데이터 하고 싶은 내용을 적는다 where 절에는 join 할 때 on 과 같이 사용한다고 생각하면 된다.

    [MySQL] utf8mb4_general_ci와 utf8mb4_0900_ai_ci 차이 및 캐릭터셋 변경하기

    [MySQL] utf8mb4_general_ci와 utf8mb4_0900_ai_ci 차이 및 캐릭터셋 변경하기

    utf8mb4_general_ci와 utf8mb4_0900_ai_ci 차이 테이블 생성시 컬럼에서 해당 내용이 섞여서 설정되고 있었다. 두개의 차이는 같은 값을 가져도 collation이 다르게 설정되면 정렬/비교 순서가 달라져 조인이슈나 결과값이 달라질 수 있다. 이유가 있지 않으면 하나로 통일해서 사용하는 것을 권장한다. utf8mb4_0900_ai_ci의 경우 한글 데이터를 조건으로 검색하는 결과에도 영향을 미친다. 그래서 정확한 한글 검색을 처리하기 위해서는 utf8mb4_general_ci 로 설정해서 사용한다. 테이블의 캐릭터셋 변경 utf8mb4_0900_ai_ci -> utf8mb4_general_ci 로 변경하는 명령어이다. alter table rewards.member convert ..

    [MySQL] 문자열 일부분만 가져오기

    mysql 에서 문자열을 일부만 가져와서 사용하고자 한다. LEFT(문자 or 컬럼명, 가져올 갯수) MID(문자 or 컬럼명, 시작위치, 가져올 갯수) RIGHT(문자 or 컬럼명, 가져올 갯수) LEFT는 왼쪽에서부터 시작하는거고 RIGHT는 오른쪽에서부터 시작한다. 이름 가나다라마바사 SELECT LEFT(name, 3) from member; ## -> 가나다 SELECT MID(name, 2, 4) from member; ## -> 나다라 SELECT RIGHT(name, 3) from member; ## -> 마바사

    [MySQL] MySQL에 csv 파일 INSERT 하기

    [MySQL] MySQL에 csv 파일 INSERT 하기

    MySQL에 csv 파일에 있는 데이터를 INSERT 하고자 한다. 데이터 가져오기 데이터를 넣고자 하는 테이블 우클릭 후 데이터 가져오기 선택 csv 에서 가져오기 선택 후 다음 클릭 다음선택 후 csv 파일 선택 csv 파일에서 해당 테이블에 어떤 컬럼값으로 매핑해서 넣어줄지 선택 csv 파일을 만들때 컬럼명이랑 동일하게 해도 되고 Target 에서 적용하고자 하는 컬럼을 선택해도된다. Mapping에 create 가 나온다면 새로운 컬럼이 생기면서 추가된다. 만약 테이블 컬럼의 변경 없이 데이터만 넣고 싶다면 create 라는 내용이 있으면 안된다. 위의 내용을 다 하면 데이터가 들어가 있는 것을 확인할 수 있다.

    [MySQL] 데이터 null 을 0 으로

    DB 데이터 조회 시 null 인 값을 0으로 변환하고자 한다. 조회할 때만 null 을 0으로 바꾸는 방법이다. select COALESCE(h.point, 0) from history h ; 실제 DB에 데이터를 null 을 0으로 수정하는 방법이다. update history set refund_point = 0 where refund_point is null;

    [Java] 자바에서 날짜 데이터 형식 변경 (년/월 가져오기, 분기 계산하기, 날짜 포맷 변경)

    현재 날짜 가져오기 LocalDate date = LocalDate.now(); 현재 날짜의 년, 월 데이터 가져오기 // 년 date.getYear(); // 월 date.getMonthValue(); 분기 계산하기 // 분기 계산 public static Integer getQuarter() { Calendar cal = Calendar.getInstance(); Integer nowMonth = cal.get(Calendar.MONTH) + 1; // 현재 월 Integer quarter = (int) Math.ceil(nowMonth / 3.0); // 분기 return quarter; } 월 데이터로 분기 계산 // 월 데이터로 분기 계산 public static Integer getQuarte..

    [Java] 자바 실행 시간 측정

    long beforeTime = System.currentTimeMillis(); //코드 실행 전에 시간 받아오기 //시간 측정할 코드 추가 long afterTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 long secDiffTime = (afterTime - beforeTime)/1000; //두 시간에 차 계산 System.out.println("시간차이(m) : "+secDiffTime);