MySQL(MariaDB 포함)에서 날짜값을 더하거나 뺄 때 사용하는 함수는 DATE_ADD와 DATE_SUB가 있다. 이 함수를 사용해서 현재일보다 7일 전, 한달 전과 같은 데이터를 가지고 오거나 시한이 있는 컨텐츠의 경우 마감일을 지정한다든지 하는 로직등을 구현할 수 있다. DATE_ADD 및 DATE_SUB 사용법 DATE_ADD(date, INTERVAL value interval_type) DATE_SUB(date, INTERVAL value interval_type) 날짜를 더하거나 빼는 방법은 메소드만 다를 뿐 사용 방법은 동일하다. 첫번째 인자인 date는 수정해야 할 대상 날짜값이다. 두번째 인자인 value는 더하거나 뺄 시간 값이고, interval_type는 시간 유형이다. 시간 ..
뷰(View)의 생성 목적 뷰(View)는 관리 측면과 사용성 편의, 유지 보수, 보안 등을 위해서 사용하는 기법이다. 쿼리(Query)가 복잡할 경우 이를 프로그램으로 구현하게 되면 유지보수가 잘 안될 수도 있고, 초급 개발자의 경우 실수를 범할 수 있다. 게다가 쿼리 및 테이블을 공개해야 할 경우 보안 측면에서 문제가 발생할 수 있다. 즉, 뷰는 어떤 하나의 목적으로 사용하는 것이 아니라, 편의성, 보안성, 유지 보수 등의 다양한 이유로 인해서 사용하는 것이라 생각하면 된다. 즉 위 내용을 간단히 정리하자면 아래와 같다. 편의성 : 복잡한 쿼리를 단축 시켜 놓기 때문에 개발을 보다 쉽게 진행할 수 있다 보안성 : 테이블 명칭과 컬럼 명칭을 숨길 수 있기 때문에 보안성이 뛰어나다 유지보수성 : 코드가 ..
포스팅에 앞서 MySQL과 MariaDB는 사실상 동일한 DB이기 때문에 본 포스팅은 MariaDB에서도 적용됩니다. UNION의 개념 우리가 하나의 쿼리안에 다양한 테이블의 정보를 담기 위해서는 서브쿼리와 조인(Join)등의 방식으로 데이터를 표현하곤 합니다. 하지만 다른 테이블이지만 각각의 테이블의 내용을 동일한 컬럼에 담아서 표현하고 싶을 경우 어떻게 해야 할까요? 바로 이럴때 사용하는 것이 유니온(UNION) 입니다. 데이터 예시 유니온의 사용법을 알려드리기 위해 비슷한 구조의 테이블을 2개 만들었습니다. 하나는 블로그의 정보를 넣으려고 하는 content_tbl이고, 다른 하나는 뉴스의 정보를 넣으려고 하는 news_tbl입니다. UNION 명령어 이 둘의 데이터를 한번에 하나의 쿼리로 표현하는..
데이터베이스 클러스터의 개요 개념 - 데이터를 통합할 때 성능 향상과 가용성을 높이기 위해 DB 차원의 파티셔닝(Partitioning) 또는 클러스터링(Clustering)을 이용한다. - 파티셔닝은 용량이 큰 테이블이나 인덱스를 관리하기 쉬운 단위로 분리하는 방법이다 - 클러스터링은 동일한 성격의 데이터를 동일한 데이터 블록에 저장하는 방법으로, 자주 같이 사용되는 데이터를 같은 위치에 저장시키는 기법이다. 장점 - 파티션 사이의 병렬 처리를 통해 빠른 검색 및 처리 성능 얻음 - 성능의 선형적인 증가 효과 - 특정 파티션의 장애가 발생하더라도 서비스가 중단되지 않는 고가용성(High Availability, HA) 확보 파티셔닝의 종류 파티셔닝은 DB 구성 형태에 따라 단일 서버 내의 파티셔닝과 다..
여러개의 Row로 되어 있는 데이터를 한개의 값으로 묶어서 가지고 오고 싶을 경우, MySQL(혹은 MariaDB)에서는 Group_Concat을 사용하여 처리할 수 있다. 실행 예시 테이블 생성 CREATE TABLE `stock` ( `stock_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'pk', `exchange` varchar(10) NOT NULL COMMENT '구분', `stock_nm` varchar(50) NOT NULL COMMENT '주식명', `ticker` varchar(10) NOT NULL COMMENT '티커', PRIMARY KEY (`stock_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; 데이터 삽..
자바로 MySQL(혹은 MariaDB)에 대량의 데이터를 넣는 방법이 2가지 존재한다. 하나는 Batch 기능을 활용하여 Insert를 하는 방법, 나머지 하나는 Load 명령어를 활용하여 넣는 방법. 본 포스팅은 2가지 방법에 대해서 설명해 보고 장단점에 대해 말해보도록 하겠다. add Batch 방법 Java에서 DB 데이터를 핸들링 할 수 있는 PreparedStatement 같은 라이브러리에 Batch 하는 방식을 제공하는 기능이 있다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263Connection conn = null;Prepare..
MySQL에서 대용량의 데이터 처리를 하기 위해서 주로 쓰이는 두개의 방식인 Batch와 Load 방식에 대한 장단점을 비교하기로 한다. 어느 것이 무조건 좋다 나쁘다를 할 수 없기 때문에 어떤 상황에서 이 방식을 써야 할지 등을 알려보고자 한다. 참고로, 필자가 다니는 회사는 전국민 상대로 서비스를 하고 있으며, 하루에도 몇십만명 이상이 사이트를 방문하기에 당연히 몇백만 이상의 로그가 쌓이고 있다. 데이터 분석을 한 결과(몇천만건 ~ 억단위)를 DB에 매일 배치 형태로 밀어 넣고 있는데 몇백에서 몇기가 단위의 데이터를 DB에 밀어 넣을 때는 늘 상 load(부하)를 잘 관리해야만 할 것이다. Batch 방식 일단, 많이들 알고 있는 Batch 방식은 Insert를 Add 시킨 후, 한번에 커밋(comm..
MySQL은 오라클에서 제공하는 여러가지 기능들이 없기 때문에 변수를 선언하는 방식처럼 작업을 수행해야 한다. rownum 같은 경우는 변수를 설정한 후, 카운트가 증가할 때마다, 변수에 +1을 증가시켜서 출력하는 식의 편법이 존재한다. 번호(ROWNUM) 생성 방법 12345SELECT @rownum:=@rownum+1 as no, dic.*FROM dic_wrd_cls_tmp dicWHERE (@rownum:=0)=0cs WHERE 조건에 rownum을 초기화하여 사용하는 방법 12345SET @rownum:=0;SELECT @rownum:=@rownum+1 as no, dic.*FROM dic_wrd_cls_tmp dic;cs SET으로 rownum 변수를 초기화하여 사용하는 방법 페이징(Pagin..
아무래도 MariaDB와 MySQL의 만든 사람이 동일하다 보니 해당 포스팅은 MySQL에서도 동일하게 문제 해결이 될 것이나, 폴더 및 설치 세팅이 미세하게 다를 수 있다. MariaDB를 설치하였는데 뭔가 빠진 느낌이 들어서 뭔가 곰곰히 생각해보니, Install 과정에서 캐릭터셋을 선택하는 것이 없었다는 것을 판단하였고, Toad for Mysql로 테이블을 생성 할 때, comment가 깨져있는 것을 발견했다 (이건, 빼도박도 못하는 캐릭터셋 문제) 보다시피, 테이블 Comment 설정 창에 캐릭터셋이 깨져 있는 것을 발견 MariaDB, MySQL은 캐릭터셋을 확실히 잡고 시작을 해야 나중에 참변을 방지할 수 있다.확인 방법 C:\Windows\System32>mysql -u root -p En..
MySQL과 MariaDB는 동일한 사람이 만들었기 때문에, 사용법 또한 거의 동일하다. 그래서 이 문법은 MySQL에서 하든 MariaDB에서 하든 모두 동일하게 작동되는 점 참고 하면 좋을 것 같다. MySQL(혹은 MariaDB)를 설치하였다면, 제일 처음에 해야 할일은 데이터베이스(Database)를 생성해야 되는 것이다. MySQL의 database의 개념은 Oracle의 tablespace 개념과 동일하며, 테이블들과 View, Function 등을 생성하는 공간이라고 보면 된다. 데이터베이스를 생성하였다면, 다음으로는 계정을 생성한다. 계정을 생성할 때, 권한을 한번에 지정하여 생성할 수도 있고, 생성하고 난 후 권한을 지정할 수 있는데 여기서는 두가지 방식 모두 해보도록 한다. 데이터 베이..
토드(Toad)라고 불리우는 유명한 Oracle용 DBMS Tool이 존재하는데 워낙 사용성이 뛰어나지만, 가격이 비싸기 때문에 많은 사람들이 눈물을 머금고, SQLDeveloper를 쓰거나 혹은, 어둠의 경로로 몰래 받아서 쓰는 사람들이 존재할 것이다. 그만큼 DBMS 툴로서, 상징적인 존재인 제품인데 MySQL 혹은 MariaDB용 버전도 존재한다. 다행인것은, 무료 DBMS 인 Mysql, MariaDB 처럼 툴 역시 무료로 제공 된다. https://www.toadworld.com/m/freeware/1469 사이트에 접속을 하게 되면, 위와 같은, 다운로드 화면이 나오게 된다. 다운로드를 누른다고, 한번에 자료를 주진 않는다 (오라클과 동일) download 버튼을 누르면, 위와 같이 로그인 화..
오라클에도 존재하듯, MySQL에도 SUBSTRING 기능이 존재한다. 이 SUBSTRING은 거의 모든 언어나 DBMS에 자체적으로 내장이 되어 있고, 사용방법도 비슷하다. SUBSTR이라고 써도 되고, SUBSTRING으로 써도 된다. 둘은 완전히 동일하다. 사용방법SUBSTR(str,pos), SUBSTR(str FROM pos), SUBSTR(str,pos,len), SUBSTR(str FROM pos FOR len) 1. 인자값 설명 str 원본 문자열 pos 시작 위치값 len 가져올 길이값 2. 사용사례 SUBSTR(str, pos) SELECT SUBSTR('동해물과백두산이',5); 결과) 백두산이 해석) 5번째 문자열부터 읽으시오. SUBSTR(str FROM pos) SELECT SUB..