order by cast(id as unsigned) desc

Mysql RSS Icon ATOM Icon 2012/12/28 16:39 visualp

[원문]  : http://urikr.tistory.com/85

order by 절을 사용 하다보면 varcahr타입 등의 integer 탑입이 아닌 타입으로
정렬을 해야 될 경우가 생긴다 .
이런 경우 다음과 같이 처리 한다.
order by cast(id as unsigned) desc

order by 절 뿐만 아니라 텍스트를 숫자로 변환 할 때 사용 하면 될거 같다.

2012/12/28 16:39 2012/12/28 16:39
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/543

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/543

mysql, if 문

Mysql RSS Icon ATOM Icon 2012/08/31 15:24 visualp
( if(mb_hp='',concat(hp1,hp2,hp3) , mb_hp  ) ) as 'mb_hp'
위와 같이 사용함
if(조건, true, false)

위와같이 사용 합니다.
2012/08/31 15:24 2012/08/31 15:24
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/512

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/512

MySQL 에서 IF문 사용하기

Mysql RSS Icon ATOM Icon 2012/05/14 16:28 visualp
[MySQL] IF문 사용예제

※ 경고
높이뜬새의 모르는 사람이 없는 팁시리즈 입니다.
이 팁시리즈는 지면낭비라는 항의시에 즉각 중단됩니다.

MySQL에서는 IF문 자체를 프로시져 도움없이도 SQL문에 바로 삽입하는 것이 가능해서 무척 편리합니다. 물론 제어부분이 계속 중첩된다면 CASE문을 사용하셔야 합니다.

형식) if (조건,
참일때 결과,거짓일때 결과)


예1) 쉬운 예

mysql> SELECT if( 2 > 1, '참', '거짓' );

결과 : 2가 1보다 크므로 당연히 참을 출력합니다.

예2) WHERE절에서 사용

SELECT * FROM join_table WHERE if( CHAR_LENGTH(name) = 2, 'Y', 'N' ) = 'Y';

결과 : join_table의 name컬럼에서 이름이 두글자인 분만 가져옵니다.


예3) SELECT문에서 사용

SELECT if( substr( name, 1, 1 ) = '강', '강씨', name ) FROM join_table;

결과 : join table의 name컬럼에서 이름의 첫자가 '강' 이면 '강씨'를 출력하고, 아니라면 name 컬럼의 이름을 걍 출력합니다.

From : 높이뜬새(www.webmadang.net)

2012/05/14 16:28 2012/05/14 16:28
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/473

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/473

MySQL INSERT의 사용법

Mysql RSS Icon ATOM Icon 2012/03/04 14:51 visualp
[원문] : http://webtech.tistory.com/31

1. MySQL INSERT의 사용법


MySQL 공식 Document에서는 아래와 같이 사용법을 정의 하고 있다.(참고, http://dev.mysql.com/doc/refman/5.5/en/insert.html)
각각의 의미는 천천히 살펴보면 누구나 알 수 있을 것이다.
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ]

OR:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
OR: 
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)] SELECT ...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]

Document상에 있는 내용을 번역은 아니고, 나름 이해해서 설명 하자면...

INSERT는 이미 존재하는 Table에 새로운 rows를 추가한다.
[INSERT ... VALUES]와 [INSERT ... SET]과 같은 문장 형식은 특정한 값을 명확하고 추가하며, [INSERT ... SELECT] 형식은 다른 Table 혹은 Table들로 부터 선택된 값들을 추가 한다.(여기서 주의 해서 봐야 할 부분은 [다른 Table혹은 Table들]이다. 즉 subquery내에 동일한 Table명이 있으면 안 된다. 달리 말해 동일한 테이블의 일부를 다시 넣는 방식으로는 이와 같은 문법으로 작동 하지 않는다는 뜻이다.)
이전 row의 값을 덮어 쓰고자 한다면 INSERT대신 REPLACE를 사용할 수 있다. REPLACE는 Primary key나 Unique index와 같은 새로운 row를 추가 하고자 한다면, 이전 row를 먼저 지우고 새로운 row를 추가 하는 방식으로 동작한다. 중복되지 않는 것은 그냥 INSERT와 동일하게 동작한다.

위에서 사용된 tbl_name은 추가 되어야 할 row들이 들어갈 Table명을 의미 한다.
column name은 Table명 뒤에 콤마(,)로 분리된 리스트로 작성 할 수 있으며, 이 경우 각 column name에 해당하는 값을 VALUES리스트나 SELECT문으로 제공해야 한다. 만약 column name을 작성하지 않는다면, 해당 테이블의 모든 column의 값들을 VALUES리스트나 SELECT문으로 제공해야 한다. 테이블의 column을 모른다면 DESCRIBE tbl_name으로 찾을 수 있다.

SET절은 column이 명확하게 지정되는 것을 나타낸다.

column의 값은 여러가지 방법들로 주어질 수 있으며, 많이 사용하거나 중요한 내용만 몇가지 다루고자 한다.

먼저 가장 일반적인 방법이다.

INSERT INTO tbl_name (col1,col2) VALUES(15, 30)

해당 필드명과 값들의 리스트를 순서대로 나열하는 방식이다. 이때 반드시 컬럼의 수와 값의 수가 같아야 하며, NOT NULL이 아닌 필드는 포함되지 않아도 된다.



다음은 필드 리스트의 생략이다.

INSERT INTO tbl_name VALUES(15, 30); ==> tbl_name테이블의 필드가 2개라면...

이때는 반드시 컬럼의 수만큼 값의 리스트를 제공해야 한다.



SET 키워드를 이용한 방법.

INSERT INTO tbl_name SET col1 = 15, col2 = 30;

SET키워드 뒤에 컴럼과 값의 쌍으로 나열해 주면 된다.



INSERT ... SELECT를 이용한 방법.

INSERT INTO tbl_name (col1,col2) SELECT 15, 30;

다른 column명을 참조를 통한 방법.

INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);

이 경우 참조되는 column은 꼭 먼저 값이 설정되어야 한다. 아래와 같이 하면 안된다.
INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);
col2가 15로 설정되기 전에 col1에 col2*2를 넣으라고 하면 안된다는 것이다.


VALUES를 이용한 multiple rows.

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

참고로 AUTO_INCREMENT로 증가된 값을 알고 싶다면 mysql_insert_id()함수를 사용하면 된다. 이에대한 자세한 정보는 아래 링크를 참조하기 바란다.
http://dev.mysql.com/doc/refman/5.5/en/mysql-insert-id.html

마지막으로 당연한 것이지만, INSERT는 해당 Table에 대한 INSERT권한이 있어야만 한다.

2012/03/04 14:51 2012/03/04 14:51
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/465

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/465

[원문]:  http://explainextended.com/2009/07/20/hierarchical-data-in-mysql-parents-and-children-in-one-query/
[원문] : http://blog.naver.com/PostView.nhn?blogId=justis1&logNo=40091860278

Oracle에서는 Connect by로 쉽게 해결되는데 Mysql에서는 고생하시는 분 많으 실것 같아서 올립니다

 

Mysql 계층 구조 (Tree 구조)에서

테이블 구조가 아래와 같은 경우

 

 ID  PARENT_ID ETC
 1 0 ROOT
 2 1

CHILD

 3 2 CHILD OF 2
 4 2 CHILD OF 2
 5 2

CHILD OF 2

Depth가 깊어 질수록 부모노드를 찾기가 힘들어 진다 . 이럴 경우 특정 자식 노드에서 Root까지의 부모노드를 가져오고 싶은 경우 아래의 쿼리를 사용하면 쉽게 해결된다.

 SELECT @r as _ID,
      (
        SELECT @r := PARENT_ID FROM TABLE WHERE ID = _ID
      ) AS _PARENT_ID, @l := @l + 1 AS level
      FROM (
        SELECT @r := 5
      ) vars, TABLE h
      WHERE @r <> 0
   
     )A, TABLE B

 

결과

 _ID

PARENT_ID LEVEL
 1  0  1
 2  1  2
 5  2  3
2012/02/20 14:46 2012/02/20 14:46
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/458

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/458

mysql TIMESTAMP

Mysql RSS Icon ATOM Icon 2012/02/17 10:32 visualp

MYSQL  TIMESTAMP 사용 방법
TIMESTAMP DEFAULT Now()

2012/02/17 10:32 2012/02/17 10:32
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/456

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/456

MYSQL LOG 관리 (mysql log 관리)

Mysql RSS Icon ATOM Icon 2011/05/27 18:01 visualp

MySQL에서 사용하는 log-bin이라는 옵션은 사용된 쿼리들이 로깅되는 파일이며 Innodb 혹은 Replication등에서 사용되곤 합니다.

하지만 이 파일의 문제는 무한정 늘어난다는 것입니다. relay-log-space-limit 같은 옵션이 있지만 이 옵션은 Replication에서 사용되는 relay-log-bin의 용량을 제한 하는 옵션이지 해결책이 되지 못합니다.

하지만 이 파일을 정리하는 방법이 있습니다. 우선 다음의 Query를 사용하는 것입니다.

PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY)

INTERVAL에서는 원하시는 로깅 시점을 기록하시면 됩니다. 위의 경우에는 30일 이전의 로깅 정보를 삭제하게 됩니다.

차례차례 해보도록 하겠습니다.


1. 현재의 하드디스크 용량 상태를 확인합니다.

[root@Theeye db]# df -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              18G  1.9G   15G  12% /
/dev/sda3              15G  803M   13G   6% /home
/dev/sda2              97G   78G   15G  85% /usr/local/mysql/db

데이터베이스 공간이 85%나 사용되어 곧 꽉찰지도 모른다는 불안감에 휩싸이게 되었습니다.


2. log-bin 파일을 확인해 봅시다.

[root@Theeye db]# ls mysql-bin.*

mysql-bin.000001  mysql-bin.000002  mysql-bin.000003 ......  mysql-bin.000073

파일이 엄청나게 많이 있습니다.


3. 다음 명령어를 수행합니다.

mysql -u root -p -e "PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY)"

Enter password:

물론 mysql에 접속하셔서 위의 명령어를 입력하셔도 됩니다. Super권한을 가진 root계정으로 실행해 주세요.


4. log-bin 파일이 줄었나 확인해 봅시다.

[root@Theeye db]# ls mysql-bin.*

mysql-bin.000041  mysql-bin.000042  mysql-bin.000043 ......  mysql-bin.000073



41번 이전의 파일들이 모두 삭제 되었습니다. 41번 부터가 최근 30일 이내의 로그정보가 남아있는 모양이군요.

5. 하드디스크 용량 상태를 확인해 봅시다.

[root@Theeye db]# df -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              18G  1.9G   15G  12% /
/dev/sda3              15G  803M   13G   6% /home
/dev/sda2              97G   40G   53G  43% /usr/local/mysql/db

확실히 용량이 많이 확보가 되었군요^^

주기적인 실행이 필요하실 경우에는 위의 명령어를 crontab에 등록하시면 됩니다. 일주일에 한번정도의 실행이 적당하겠네요.


[출처] http://theeye.pe.kr/363


---------------------------------------------------------------------------------------------


파일이 커서 저장하지 안을려면 my.cnf 에서  log-bin 된부분을 주석 처리 해야 되고

파일 위치를 바꾸고 싶다면 log-bin = /usr/~~/file  처럼 주소를 적어주면 된다.



생성된 파일은 복구에도 사용이 가능하다.


기본적으로는

/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/var/localhost-bin.000001 > bakcup.sql

식으로 파일을 일반 쿼리로 컨버팅 가능하다...


사용할 만한 옵션으로는

 -d 데이타베이스명      이건 특정 데이타베이스만 가져온다.


/usr/local/mysql/bin/mysqlbinlog --start-datetime="2008-12-30 01:00:00" --stop-datetime='2009-01-10 01:00:00' /usr/local/mysql/var/localhost-bin.000001 > bakcup.sql


이건 시간을 지정해서 그부분만을 가져온다...



가져온걸  다시 디비로 넣을때는 . 

/usr/local/mysql/bin/mysql -u 사용자 -p  < backup.sql


[원문] - http://blog.naver.com/forioso/10040245402

2011/05/27 18:01 2011/05/27 18:01
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/383

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/383

mysql - reqpire , analyze

Mysql RSS Icon ATOM Icon 2011/02/25 20:26 visualp

Problem
디비 서버를 운영하다보면 아래와 같은 에러와 함께 db서버가 죽어버리는 경우가 있다.

091030 13:40:29 [ERROR] /usr/libexec/mysqld: Table ‘./post/post_tag’ is marked as crashed and should be repaired

Solution
mysql> analyze table some_table;
mysql> repaire table some_table;
//위에서 실패하면 아래 실행
]# myisamchk -r some_table;

2011/02/25 20:26 2011/02/25 20:26
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/361

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/361

[원문]  :  http://tagbox.tistory.com/48

select * from table where name >= '가' and name < '나'
select * from table where name >= '하'


///////초성으로 검색하기/////////
 if($find == 'ㄱ'){
  $where = "and (uname RLIKE '^(ㄱ|ㄲ)' OR ( uname >= '가' AND uname < '나' )) order by uname";
 }else if($find == 'ㄴ'){
  $where = "and (uname RLIKE '^ㄴ' OR ( uname >= '나' AND uname < '다' )) order by uname";
 }else if($find == 'ㄷ'){
  $where = "and (uname RLIKE '^(ㄷ|ㄸ)' OR ( uname >= '다' AND uname < '라' )) order by uname";
 }else if($find == 'ㄹ'){
  $where = "and (uname RLIKE '^ㄹ' OR ( uname >= '라' AND uname < '마' )) order by uname";
 }else if($find == 'ㅁ'){
  $where = "and (uname RLIKE '^ㅁ' OR ( uname >= '마' AND uname < '바' )) order by uname";
 }else if($find == 'ㅂ'){
  $where = "and (uname RLIKE '^ㅂ' OR ( uname >= '바' AND uname < '사' )) order by uname";
 }else if($find == 'ㅅ'){
  $where = "and (uname RLIKE '^(ㅅ|ㅆ)' OR ( uname >= '사' AND uname < '아' )) order by uname";
 }else if($find == 'ㅇ'){
  $where = "and (uname RLIKE '^ㅇ' OR ( uname >= '아' AND uname < '자' )) order by uname";
 }else if($find == 'ㅈ'){
  $where = "and (uname RLIKE '^(ㅈ|ㅉ)' OR ( uname >= '자' AND uname < '차' )) order by uname";
 }else if($find == 'ㅊ'){
  $where = "and (uname RLIKE '^ㅊ' OR ( uname >= '차' AND uname < '카' )) order by uname";
 }else if($find == 'ㅋ'){
  $where = "and (uname RLIKE '^ㅋ' OR ( uname >= '카' AND uname < '타' )) order by uname";
 }else if($find == 'ㅌ'){
  $where = "and (uname RLIKE '^ㅌ' OR ( uname >= '타' AND uname < '파' )) order by uname";
 }else if($find == 'ㅍ'){
  $where = "and (uname RLIKE '^ㅍ' OR ( uname >= '파' AND uname < '하' )) order by uname";
 }else if($find == 'ㅎ'){
  $where = "and (uname RLIKE '^ㅎ' OR ( uname >= '하')) order by uname";
 }else{
  $where = "order by uname";
 }

 $qry="select * from table_name where $where";
 $res=mysql_query($qry);

2010/12/27 12:28 2010/12/27 12:28
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/343

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/343

[원문] : http://cafe.naver.com/fmsource2.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=143
Table '' is marked as crashed and should be repaired

라고 뜰시 해결하는 방법을 알려드리겠습니다.

만약 characters라는 테이블에서 저런에러가 뜰경우

repair table characters;

라고 스크립트에 입력후 excute를 눌러주시면

복구가 되는사람도 있고 않되는분도 있습니다.

더자세히 말하자면

DB 즉, mysql 흰바탕에 오른쪽버튼 누른후

Add New script TAB

을 누르셔서 repair table characters; 라고 입력하시면 되겠습니다.

그리고 위에 번개모양 Excute를 눌러주세요 ^_^

감사합니다.

 

만약 해결 않될시.

여러번 시도해서 복구가 안될때에는  myisamchk로 복구한다.(DB 서버를 끄고 할것)

mysql 4.0 버젼
root]# /usr/local/mysql/bin/myisamchk <옵션> -u<User> -p /usr/local/mysql/var/<DBname>/<Tablename.MYI> or <*.MYI>
password:<password>


mysql 3.0 버젼
root]# /usr/local/mysql/bin/isamchk <옵션> -u<User> -p /usr/local/mysql/var/<DBname>/<Tablename.ISM> or <*.ISM>
password:<password>


위 명령 실행시 해당되는 ISM or MYI 파일의 에러를 체크하여 복구한다
<옵션>  설명
-o : 안전하게 복구
-r : 복구
-f : 강제복구


사용예)
root]# /usr/local/mysql/bin/myisamchk -o -uwebin_pe_kr -p /usr/local/mysql/var/webin_pe_kr/board.MYI
password:*********

2010/11/21 21:39 2010/11/21 21:39
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/337

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/337