2010년 7월 8일 목요일

mysql 빵부스러기

drop all tables;
아래의 쿼리 실행 후 drop table 뒤에 쫙 붙혀 넣기.

select GROUP_CONCAT(A.T_NAME) from (
 select concat(T.TABLE_SCHEMA, '.', T.TABLE_NAME) T_NAME from information_schema.TABLES T where table_name like 'T_%' and TABLE_SCHEMA = 'test'
) A

group_concat
select 된 결과를 ', ' 붙혀서 단일 스트링으로 만들어 준다.

select group_concat(hobbies separator ', ')
from peoples_hobbies where person_id = 5 group by 'all';



mysql reference:
http://dev.mysql.com/doc/refman/5.0/en/alter-table.html


dump, import
-- MySQL 덤프
$ mysqldump DB 테이블 -u계정 -p -q -d --default-character-set=euckr > 저장파일 위치/파일명


-- MySQL 임포트
$ mysql -u계정 -p DB < 저장파일 위치/파일명


날짜별 통계



SELECT
ERROR_CODE,
DATE_FORMAT( CREATE_DATE, '%m-%d' ),
COUNT(1)
FROM
TBL_NAME
WHERE
ERROR_CODE='E000'
GROUP BY
ERROR_CODE, DATE_FORMAT( CREATE_DATE, '%m-%d' )

Table 복제

테이블을 기존의 테이블과 동일한 구조로 생성 한 후
기존 테이블의 레코드를 신규 테이블에 저장한다.

CREATE TABLE TSH_OPTION_TMP LIKE TSH_OPTION

INSERT INTO TSH_OPTION_TMP SELECT * FROM TSH_OPTION


날짜 포맷
%M  Month name (January..December)  
%W  Weekday name (Sunday..Saturday)  
%D  Day of the month with English suffix (1st, 2nd, 3rd, etc.)  
%Y  Year, numeric, 4 digits  
%y  Year, numeric, 2 digits  
%X  Year for the week where Sunday is the first day of the week, numeric, 4 digits, used with \'%V\'  
%x  Year for the week, where Monday is the first day of the week, numeric, 4 digits, used with \'%v\'  
%a  Abbreviated weekday name (Sun..Sat)  
%d  Day of the month, numeric (00..31)  
%e  Day of the month, numeric (0..31)  
%m  Month, numeric (01..12)  
%c  Month, numeric (1..12)  
%b  Abbreviated month name (Jan..Dec)  
%j  Day of year (001..366)  
%H  Hour (00..23)  
%k  Hour (0..23)  
%h  Hour (01..12)  
%I  Hour (01..12)  
%l  Hour (1..12)  
%i  Minutes, numeric (00..59)  
%r  Time, 12-hour (hh:mm:ss [AP]M)  
%T  Time, 24-hour (hh:mm:ss)  
%S  Seconds (00..59)  
%s  Seconds (00..59)  
%p  AM or PM  
%w  Day of the week (0=Sunday..6=Saturday)  
%U  Week (0..53), where Sunday is the first day of the week  
%u  Week (0..53), where Monday is the first day of the week  
%V  Week (1..53), where Sunday is the first day of the week. Used with \'%X\'  
%v  Week (1..53), where Monday is the first day of the week. Used with \'%x\'  
%%  A literal `%\'.

인덱스 추가


ALTER TABLE t2 ADD INDEX (d), ADD UNIQUE (a);


date time functions



str_to_date



mysql> SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');
-> '2013-05-01'
mysql> SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y');
-> '2013-05-01'


resource : http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date

DATE_ADD, DATE_SUB

select * from TBL_NAME
WHERE CREATE_DATE >= DATE_SUB(SYSDATE(), INTERVAL 360 MINUTE)

resources: http://www.w3schools.com/sql/func_date_sub.asp


LIMIT


SELECT 실행 시 페이징 처리를 위한 LIMIT
쿼리문 뒤에 limit만 살짝 붙혀주기.

LIMIT offset, size
offset은 0부터 시작함

대소문자 구분

mysql에서는 컬럼 값의 대소문자 구분을 하지 않는다. 웃겼다.. 한참 웃었어.
SELECT 할 때도 대소문자 구분없이 처리가 되지만, PK나 Unique Constraints에 걸려 있는 컬럼들도 대소문자가 다른 값으로 Insert 되지 않는다.
컬럼 속성을
`EMAIL` VARCHAR(50) NOT NULL 이라고 선언했을 경우에
`EMAIL` VARCHAR(50) BINARY NOT NULL 또는
`EMAIL` VARCHAR(50) NOT NULL COLLATE 'utf8_bin' 로 변경해 주면 된다.
위와 같이 컬럼 속성을 변경하면 대소문자 구분된다.

댓글 없음:

댓글 쓰기