'MySQL'에 해당되는 글 14건

  1. 2008.02.14 한글 order by가 불량스러울때
  2. 2008.02.12 mysql 날짜로 group by
  3. 2008.01.28 mysql 쿼리결과 파일로 받아내기
  4. 2008.01.28 mysql show processlist 계속 모니터링
  5. 2008.01.17 mysql 비밀번호 변경 1
  6. 2008.01.16 사용자 추가 하기
  7. 2008.01.15 2개의 날짜차이 구하기
  8. 2007.12.13 [error code] ERROR 1114 (HY000)
  9. 2007.12.13 alter / 테이블 변경
  10. 2007.12.13 left outer join

SELECT * FROM 테이블명 ORDER BY 이름컬럼명;

[현상]
한글이 'ㅇ' 부터 나옴

[원인]
내부적으로 처리되는 charset code의 문제

[처리]
SELECT * FROM 테이블명 ORDER BY binary(이름컬럼명);


[참고] SHOW VARIABLES LIKE 'character_set';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| character_set  | latin1   |
+---------------+--------+


select date_format(articleregdt, '%Y%m%d') as date, count(*) from article group by date_format(articleregdt, '%Y%m%d') order by date asc;


뭐 특별할것은 없지만 매번 아니 가끔 모르면 뭐지 뭐지?? 하다 시간보내게 되는
사례가 있어 블로그에 남긴다.
select count(itemid) count, chid INTO OUTFILE "~/channelCount.csv" FIELDS TERMINATED BY ',' from item group by chid;


mysql쿼리 결과를 그데로 파일로 backup받기
mysqladmin -uroot -prndrma*** processlist -i 1


show processlist를 계속 보고자 할때가 있다.
이때는 외부 shell 화면에서 위와같이 입력하여 프로세서를 확인하도록 한다 .
update user set password=password('XXXX') where user='root';
flush privileges;
quit
mysql -u root -p XXXX



간단하다. 누구나 알것 같다.
하지만 적어놓지 않으면 신뢰가 가지않는경우가 있다.

GRANT SELECT, INSERT, UPDATE ON test.* TO 'testuser'@'localhost' IDENTIFIED BY 'testuser';


사용자를 testuser라 추가하고 비밀번호를 testuser라 부여한다.
더불어 table test에 SELECT, INSERT, UPDATE의 권한을 주고 생성한다.

이와같이 하면 굳이 FLUSH PRIVILEGES;를 수행하지 않아도 된다.
select itemid from test where  markcnt <=0 and (TO_DAYS(now())-TO_DAYS(last_modified_time)) > 10



현재시간에서 입력되어있는 시간의 day단위 시간차를 구해옵니다.
10일 이상인것만 가져오는 Query 입니다.
mysql> alter table test000 add markcnt int(10) NOT NULL default 0;
ERROR 1114 (HY000): 테이블 '#sql-6f80_940d2'가 full났습니다.


mysql>
mysql>
mysql> show table status from rssdb like 'item'\G;
*************************** 1. row ***************************
           Name: test000
         Engine: InnoDB
        Version: 9
     Row_format: Dynamic
           Rows: 179
 Avg_row_length: 8786
    Data_length: 1572864
Max_data_length: NULL
   Index_length: 49152
      Data_free: 0
 Auto_increment: 139
    Create_time: 2007-11-26 14:47:52
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment: InnoDB free: 4096 kB
1 row in set (0.00 sec)


조회된 결과에서
max_rows Column과 avg_row_length Column값을 변경하면 됩니다.
[Syntax]
alter table table명 max_rows=레코드수 avg_row_length=원하는테이블용량
[예제]
레코드수-1천만건, 원하는테이블용량-6GB일 경우
alter table seoul max_rows=10000000 avg_row_length=6024000000;

*테이블 속성변경*
alter table [해당테이블명] change [해당필드] [바꿀필드명] [변경할필드속성];
예) 테이블의 속성만을 바꿔보자 varchar(50)으로
- alter table test000 change test test varchar(50);

예) 테이블의 필드명과 필드속성을 변경해보자 (필드명=age 속성=int)
- alter table test000 change test age int;


*테이블 필드 추가*

alter table [해당테이블명] add [추가할필드명] [필드속성];
예) 테이블에 name필드를 추가하다 속성은 varchar(20);
- alter table test000 add name varchar(20);


*필드 삭제*

alter table [해당테이블명] drop [삭제할필드명];
예) name 필드를 삭제해 보자
- alter table test000 drop name;

left outer join

DataBase/mysql 2007. 12. 13. 10:44
  SELECT a.fldid, a.userid, a.name, ifnull(b.count, 0) as count
 FROM test001 a left outer join
  (select fldid,  count(fldid) as count, userid from test002 where  userid='neouser'  group by fldid) b
 on a.fldid = b.fldid and a.userid=b.userid
 where a.userid='neouser'

위 쿼리의 결과는 아래와 같이 나온다.
쉽게 볼 것같지만 이것을 내가 따로 다루는 이유는 a.userid='neouser' 를
on에 두는지 where에 두는지가 차이가 많이 난다.

만일 a.userid='neouser'를 on절에 두게 되면 둘다 모두 count는 3,3 이 나온다.
이것가지고 1시간여를 시간을 보낸터라 기록에 남긴다.

+-------+--------+------------------+-------+
| fldid | userid | name             | count |
+-------+--------+------------------+-------+
|     6 | neouser   | test             |     3 |
|  1040 | neouser   | test2          |     0 |
+-------+--------+------------------+-------+


1 2 

글 보관함

카운터

Total : / Today : / Yesterday :
get rsstistory!