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 명령어 이 둘의 데이터를 한번에 하나의 쿼리로 표현하는..
MySQL에서는 date_format으로 날짜값을 문자열로 변경하는 포맷을 지원해 준다. 아마 DBMS로 개발을 하는 웹개발자라면 한번씩은 꼭 써보게 되는 기능일텐데, 오늘은 date_format의 포맷 설정값들과 예시에 대해서 포스팅을 해보도록 한다. 포맷 설명 포맷설정 포맷 설명 %a 영문 약칭 요일 (Sun to Sat) %b 영문 약칭 월 (Jan to Dec) %c 숫자로 표현하는 월 (0 to 12) %D 숫자 값으로 표시된 일, 뒤에 접미사가 붙음 (1st, 2nd, 3rd, ...) %d 숫자 값으로 표시된 일 (01 to 31) %e 숫자 값으로 표시된 일 (0 to 31) %f 마이크로초 (000000 to 999999) %H 시간 (00 to 23) %h 시간 (00 to 12) %I..
여러개의 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에서 대용량의 데이터 처리를 하기 위해서 주로 쓰이는 두개의 방식인 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 등을 생성하는 공간이라고 보면 된다. 데이터베이스를 생성하였다면, 다음으로는 계정을 생성한다. 계정을 생성할 때, 권한을 한번에 지정하여 생성할 수도 있고, 생성하고 난 후 권한을 지정할 수 있는데 여기서는 두가지 방식 모두 해보도록 한다. 데이터 베이..
오라클에도 존재하듯, 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..
흔히 오라클을 사용하던 사람들이 Mysql을 사용하면 헷갈리는 부분중 하나가 바로 문자열 합치기이다. 오라클은 || 로 간단하게 합치는 반면 Mysql은 해당 기능이 먹히지 않기 때문이다. 그 함수가 CONCAT, CONCAT_WS 함수이다. 1. CONCAT SELECT CONCAT(str1, str2 ... ); 한마디로, CONCAT은 문자열을 나열하면 값을 합치게 된다. 아래는 CONCAT 예제들이다. 특히, NULL 부분 확인 위 사례처럼, Concat 안에 들어가는 문자열 중, NULL이 들어가면, 무조건 결과는 NULL로 떨어진다. CONCAT을 잘못써서, NULL이 나올 수 있는 점은 감안하고, 사용하도록 하자. 2. CONCAT_WS SELECT CONCAT_WS(sepator, str1..
현재 하고 있는 프로젝트는 MySQL DB를 사용하고 있고, TA로 투입이 되면서 테이블을 설계 업무도 병행하게 되었다. (물론 다 하는건 아니었지만) 큰 그림을 그리는 작업을 하는 거라, 업무별 테이블 설계는 해당 업무의 특성인 조회 특화, 트랜잭션 없음, 집계 필요 등 데이터마이닝용 테이블 설계라 MyISAM 쪽으로 가닥을 잡고 설계를 했다. 사실 처음에는 InnoDB로 테이블을 생성하여 테스트를 하였는데... 10만건당, 테이블에 밀어넣는(Batch Insert) 작업이 약 10초정도 걸렸고, MyISAM은 7초정도에 끝났기 때문에.. 고민은 끝난듯 보였다. 데이터의 사이즈가 꽤나 큰 작업이었고, 배치 속도도 상당히 중요했기 때문이다. 전체적으로 배치작업을 진행하면서, InnoDB는 약 2시간, M..