DB관련/MySQL 23

[Date] 기준 일자에 특정 기간 후의 날짜(시간 더하기, 빼기=100일 구하기), 두 기간의 날짜 차이 가져오기(오늘은 몇일차?), 1년 365일중 오늘은 몇일째?

MySQL를 사용하다 보면, Date관련 검색 결과를 필요로 하는 경우가 많습니다. 예를 들면, 100일 날짜를 구하기? 우리가 만난 지 오늘은 몇 일차? 입사 개월 수 구하기? 입사 몇 년 차 인지 구하기? 오늘은 1년 365일중에 몇일째? 날짜에 관련된 정보는 다양하게 변형할 수 있는 조건들이 많고, 사용 빈도도 많은 편이죠. MySQL의 DATE_ADD/DATE_SUB과 DATEDIFF/TIMESTAMPDIFF함수를 이용해서, 쉽게 날짜 정보를 만들 수 있습니다. DATE_ADD와 DATE_SUB 함수의 Syntax DATE_ADD(date, INTERVAL value addunit) ##[ addunit ]### MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH Q..

DB관련/MySQL 2021.10.15

[MySQL] 주별(주간) / 요일별 판매량 리포트 MySQL 쿼리 예제 (Weekly Report / Day of week Report)

판매 리포트(Sales Report) 프로그램을 작업에서 시간/기간별 기준은 리포트의 요소중에 중요한 요소로 차지합니다.가계 주인은 주별로 판매 리포트를 통해서, 월의 초반 중반 후반의 판매량을 알고 싶어하고,그리고, 요일별로 판매량을 알아서 제품을 요일별 준비량을 미리 알 수 있는 토대로 이용하게 됩니다. MySQL에서 함수들인 DAYOFWEEK()와 WEEK(), YEARWEEK() 함수를 통해서,요일별, 주간별 리포트 쿼리를 만들 수 있습니다.아래는 요일별, 주간별 리포트를 위한 MySQL쿼리 예제들입니다.해당 예제를 통해서, 형식에 맞게 수정해서 사용하면 쉽게 리포트 작성을 할 수 있습니다. (Case 1) Day of week (월요일~일요일) 요일별 판매량요일별 판매량 보고서는 특정 기간동안 ..

DB관련/MySQL 2020.11.17

MySQL mysqldump로 full backup, DB table 백업, 복원 (중요:대용량 복원은 MyISAM엔진으로 변경하세요)

Mysql의 전체 DB를 백업 복원이 간단하게 할 수 있습니다.백업은 mysqldump명령으로 하고, 복원은 mysql을 이용합니다.여기서, sql Dump를 받는 속도는 Engine의 종류에 거의 차이가 없습니다. 그러나, dump받은 sql를 복원할때, 대용량 Data처리시 DB Engine Type에 따라 상당한 속도 차이가 크게 납니다.대용량 DB backup ->Restore작업시 DB table Engine 타입을 MyISAM으로 주시길 바랍니다.InnoDB 장점(?)들 때문에, 대용량 Data Insert 속도가 MyISAM 보다 엄청나게 느립니다. 실제 예로 600,000 rows(Disk size:190M정도)의 데이터를 sql 복원할 때, InnoDB의 경우 5시간 넘게 작업을 해도 끝..

DB관련/MySQL 2020.10.23

mysql 문자열 합치기 / 문자열 자르기 / 문자열 바꾸기 CONCAT() SUBSTRING()

MySQL 문자열을 합치기 - concant() concat() 함수를 통해, 문자열 합치기 CONCAT(str1,str2,...) -- 예제 select concat("abc","111") -- 예제2 mysql> SELECT CONCAT('My', 'S', 'QL'); -> 'MySQL' mysql> SELECT CONCAT('My', NULL, 'QL'); -> NULL mysql> SELECT CONCAT(14.3); -> '14.3' - String타입 + String타입 케이스 => concant("1","-","2") -> '1-2' - Field타입 + Field타입 케이스 => concat(fist_name, last_name) -> 'GildongHong' - Field타입 + Stri..

DB관련/MySQL 2020.07.08

SQL의 IFNULL()함수 MySQL의 COALESCE()함수로 사용

MS SQL에서 IFNULL(컬럼, 0) 컬럼값이 null이면, 0을 넣는 함수가 있습니다. MySQL에서는 COALESCE(컬럼, 0)을 이용해서 null이면, 0을 넣는 함수를 사용합니다. 출처: ISNULL(value, 0) in WHERE clause MYSQL I believe you are trying to use the IFNULL() function. IF you replaced with IFNULL that should fix your query. I suggest you go one step further and use COALESCE() instead of IFNULL(), since COALESCE() is part of the SQL standard (and IFNULL() is ..

DB관련/MySQL 2019.03.02

윈도우 mysql install 디렉토리 와 Data디텍토리 위치

윈도우용 MySQL를 설치하다보면, 설치 위치와 Data위치가 다르게 들어간다.Data 디렉토리를 히든 디렉토리인 C:\ProgramData\에 남긴다. Install Directory: C:\Program Files\MySQL\MySQL Server 5.7 Data Directory: C:\ProgramData\MySQL\MySQL Server 5.7(참고, 해당 폴더는 윈도우 10 (64bit) 기준입니다.) (주의) 재설치시 Data Directory를 지워주지 않으면, 지우고 재설치시 오류가 발생한다.

DB관련/MySQL 2017.11.11

MySQL DB Table OPTIMIZE 저장 공간 줄이기 (Storage Shrink 처리)

MySQL에서 DB에서 사용하는 Storage의 사이즈를 줄이는 방법으로 OPTIMIZE를 사용한다.예를 들어, DB data 정보들을 delete 명령으로 줄였을 때, DB의 물리적인 파일의 용량은 줄지 않게 됩니다. 이럴 때, OPTIMIZE 명령을 통해서, 물리적인 파일 용량을 줄일 수 있다.요즘 AWS와 같은 Storage의 용량이 가격 증가의 원인이 된다. 이처럼 Storage에 민감한 부분을 잘 관리함으로써, 가격을 줄일 수 있다. [OPTIMIZE 명령]mysql> OPTIMIZE TABLE {table name}; Optimize단편화 제거 작업(defrag operation)과 같이, optimize table 명령문을 사용하면 사용하지 않은 공간을 회수할 수 있다. MyISAM 엔진에서..

DB관련/MySQL 2017.11.01

[펌]MySQL 쓰면서 하지 말아야 할 것 17가지

출처: MySQL 쓰면서 하지 말아야 할 것 17가지 (https://blog.lael.be/post/370)*MySQL 쓰면서 하지 말아야 할 것 17가지*권장사항이다. 이것을 이해하면 당신의 어플리케이션이 더 나은 성능을 발휘할 것이다. 다만 이것이 사람의 실력을 판단하는 척도로 사용되서는 안 될 것이다. 작게 생각하기- 조만간 규모가 커질거라면 MySQL ecosystem을 봐야된다. - 그리고 캐싱 빡시게 안 하는 메이저 웹사이트는 없다. - develooper.com의 Hansen PT랑 Ilia 튜토리얼 볼 것 - 처음부터 확장 가능하게 아키텍처 잘 쪼개놔야된다. - 복제랑 파티셔닝 어떻게 할지 미리 계획 세워놔라. - 파일 기반 세션 좀 쓰지마 -_- - 그렇다고 너무 쓸데없이 크게 생각하지..

DB관련/MySQL 2017.08.25

MySQL 프로세스 리스트 보기 , 프로세스 죽이기.

MySQL 프로세스 리스트 보기에는 다음의 두가지 방법을 사용 [aokio]$ mysqladmin processlist mysql> show processlist; +---------+------+-----------+-------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +---------+------+-----------+-------+---------+------+-------+------------------+ | 1602724 | root | localhost | test | Sleep | 70 | | NULL | | 1603286 | root | loc..

DB관련/MySQL 2017.04.20

DB명 Table명 대소문자 구분 처리하기 (대소문자 구분 OS에서만 가능)

MySQL에서 DB명과 Table명을 대소문자 구분이 필요 할 때가 있습니다.(해당 기능은 OS의 자체에서 대소문자가 구분이 되는 OS에서만 지원됩니다.)>> : Win/Mac OS X에는 적용이 안된다고하네요? 왜 Mac OS에서 안된다고 하는지는 테스트 못해봄.>> (결과) Mac OS X에 설치된 테이블명은 대소문자 구분이 가능 (예: TestTable, 그러나 select * from testTABLE; 이명령도 처리됨) 출처: https://www.lesstif.com/pages/viewpage.action?pageId=14745775 MySQL 에서 database(Ex: testdb) 를 생성하면 다음 순서로 진행된다.my.cnf 에 설정된 datadir하위에 database 이름의 dire..

DB관련/MySQL 2016.11.08

QUARTER별 쿼리 만들기 ( 쿼터별 리포트 )

MySQL 쿼터별로 그룹핑 리포팅 QUARTER() 함수 SELECT YEAR(leaddate) AS year ,QUARTER(leaddate) AS quarter ,COUNT(jobid) AS jobcount FROM jobs WHERE contactid = '19249' GROUP BY YEAR(leaddate), QUARTER(leaddate) ORDER BY YEAR(leaddate), QUARTER(leaddate) 출처: http://stackoverflow.com/questions/6067526/how-do-i-group-a-date-field-to-get-quarterly-results-in-mysql 예제 SELECT YEAR(A.BIZ_DATE) AS YEAR ,CASE QUARTER(..

DB관련/MySQL 2016.09.29

MySQL 인코딩 UTF-8 설정하기 (한글 깨짐 문제)

MySQL 설치 시 UTF-8 환경으로 default 설치 되는 경우도 있지만, 본인처럼 한글이 깨지는 현상 발생시 mysql 환경을 utf-8으로 맞춰주는 포스팅을 진행하고자 한다. 대부분 mysql 기본 설치 시, 인코딩 타입이 latin(?) 타입으로 주로 설치되는것을 확인 할 수 있었다. 다음 명령어를 통하여 본인의 mysql 문자 인코딩을 확인하도록 하자SHOW VARIABLES LIKE 'c%' * 문자 인코딩 목록확인 확인결과 system 부분만 utf8이고 그외에는 latin1으로 인코딩 되어있다.다음 파일을 수정하여 utf8 환경으로 변경 하도록 하자 윈도우일경우 my.ini 리눅스일경우 my.cnf 파일을 찾아서 각각 위치에 맞추어 추가를 해주도록 하자 본인은 local환경이 윈도우에 ..

DB관련/MySQL 2016.05.17

SQLyog 한글 깨짐 방지

SQLyog의 과거 버전은 한글 깨짐이 없었는데요.최신 버전을 오랜만에 사용하니 한글이 깨지더군요.프로그램을 바꿔야 하나 싶다가 찾아보니 해결 방법이있군요. MySQL 호스트에 연결 > 진정된(Advanced) 설정 > 초기 명령:set session character_set_connection=utf8;set session character_set_results=utf8;set session character_set_client=utf8; 다음 내용을 입력해 주면 한글이 깨지지 않습니다.참고: http://blog.daum.net/moon0sool/95

DB관련/MySQL 2015.07.21

YEAR() MONTH() 함수로 WHERE 검색 조건에 년, 월 기준으로 검색 조건 결과 얻는 방법

WHERE 조건에 년(YEAR), 월(MONTH)을 기준으로 검색 조건으로 결과를 얻는 방법입니다. 가끔 조건 사항으로 해당 year와 month만의 범위만을 찾고 싶을 때가 있습니다. 아래와 같은 방법을 사용하면 유용합니다. 2014년의 9월의 내용만 결과를 얻기에 MONTH(), YEAR()함수를 이용하면 쉽게 사용이 가능합니다. ex) MONTH(reg_date) = '9' AND YEAR(reg_date) = '2014' SELECT * FROM TABLE WHERE MONTH(birthday) = MONTH(CURRENT_DATE) AND DAY(birthday) = DAY(CURRENT_DATE) http://stackoverflow.com/questions/7309826/how-to-retr..

DB관련/MySQL 2014.10.31

[MySQL] 2개의 테이블 count(*) 합하기 (2개의 테이블 데이터 갯수 합산)

MySQL 쿼리에서 2개의 테이블의 데이터 row 갯수를 합산하고 싶을때 서브 쿼리가 가능 하다면, SELECT (SELECT COUNT(*) FROM AAA) + (SELECT COUNT(*) FROM BBB) FROM DUAL; 실질적으로 다음과 같이 하여도 결과는 같습니다. SELECT (SELECT COUNT(*) FROM AAA) + (SELECT COUNT(*) FROM BBB); 여기서 가상 테이블 DUAL은 oracle에서 사용되는 가상테이블명 입니다. 출처: 두개 이상의 테이블 union all 후 count(*)의 합구하려면.. 참고: https://stackoverflow.com/questions/33378732/whats-the-best-mysql-alternative-to-dual

DB관련/MySQL 2011.08.03

MySQL root passwd forget 암호 변경법

윈도우 기반: mysqld.exe --skip-grant 유닉스 기반: [root@ns /root]# safe_mysqld --skip-grant & root 패스워드 변경 mysql> use mysql; Database changed mysql> UPDATE user SET password=PASSWORD('변경할패스워드') where user='root'; Query OK, 0 rows affected (0.14 sec) Rows matched: 1 Changed: 0 Warnings: 0 mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.11 sec) 출처: http://www.apmsetup.com/database.php?tutid=138&uid=291

DB관련/MySQL 2011.07.14

DECODE 함수

DECODE함수는 데이터를 원하는 다른 값으로 바꾸어 주는 함수. DECODE함수는 첫 번째 인수를 받아들여 받아들인 내용이 조건1과 일치하면 값1로 조건2와 일치하면 값2로 바꾸어 준다. DECODE(column|표현식, 조건1, value1, 조건2, value2, 조건3, value3,...) 예를 들어 sql> select deptno, DECODE(deptno, 10, '영업부', 20, '기획부', 30, '생산부', 40, '전산부') AS "부서명" from dept; 일경우 dept 컬럼의 deptno가 10일경우 '영업부', 20일경우 '기획부', 30일경우 '생산부', 40일경우 '전산부'로 나타내주게 된다.

DB관련/MySQL 2009.01.12

[펌]mysql 한달전 데이터 삭제(Shell code , sql query)

mysql 에서 로그를 남겨두는데, 용량을 많이 차지해서 일정기간이 지난후에 자동으로 삭제하도록 구성해 두었습니다. 기존에는 unix shell(bash) 코드를 이용해 처리했는데, 플랫폼(?) 호환성을 높이기 위해 sql query 로 바꿔보았습니다. 주절주절이야기 했지만, 코드는 간단합니다. 날짜를 구하는 것이 핵심(shell 이냐, sql 이냐 의 차이) LOGDATE=`/bin/date +%Y/%m/%d --date '1 month ago'` mysql log_db -e "delete from log where log_date < '$LOGDATE';" 이런 간단한 코드입니다.(bash) mysql 의 쿼리로만 작성하면 다음과 같습니다. mysql log_db -e "delete from log ..

DB관련/MySQL 2008.10.23

[펌]mysql 깨진 테이블 복구하기

## 데이터베이스 복구 - 복구 유틸리티 1. 복구대상 인덱스 테이블이 *.ISM 파일 형식이면 isamchk 사용 2. 복구대상 인덱스 테이블이 *.MYI 파일 형식이면 myisamchk 사용 해당 유틸리티 사용시에는 mysql 종료 후 사용할 것 - 복구 시 사용되는 데이터베이스 관련 파일 위치 1. /var/lib/mysql/db명에 위치 2. 각 테이블 하나에 3개의 파일이 생성되어 해당 테이블의 데이터가 실제로 저장 *.MYD : 실제 데이터가 저장되는 데이터 파일 *.MYI : 테이블의 인덱스 정보를 저장하는 인덱스 파일 *.frm : 테이블의 구조가 저장되는 스키마 파일 - 이상 유무 점검 방법 # myisamchk -s /var/lib/mysql/test.MYI //점검결과를 간략히 출력 ..

DB관련/MySQL 2008.07.14

[Mysql] 테이블 크래쉬 체크 Table 'user' is marked as crashed and should be rep..

Mysql 테이블 크래쉬가 날때, check table 명령으로 체크해 봅니다. mysql> check table n2_fileman_rtree; --빨간색이 테이블명입니다. +--------------------------+-------+----------+---------------------------------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +--------------------------+-------+----------+--------------------------------------------------------------------------..

DB관련/MySQL 2008.04.10
1