ps -ef | grep mysqld
killall mysqld
cd /usr/local/mysql/bin/
./safe_mysqld --skip-grant-table &
ps -ef | grep mysqld
./mysql -u root mysql
update user set password=password('h5530186') where user='root';
flush privileges;
exit
killall mysqld
./safe_mysqld &
./mysql -u root -p mysql
root password변경
mysqladmin -p현재패스워드 password변경패스워드
2008년 7월 7일 월요일
2008년 3월 31일 월요일
MySQL my.cnf 설정파일
=================================================================
my.cnf
=================================================================
-- 용도별 카피
my-small.cnf : 64M
my-medium.cnf : 128-256M
my-large.cnf : 512M
my-huge.cnf : 1~2G
[mysqld]
key_buffer
- 인덱스를 위한 버퍼 공간
- 키버퍼의 크기는 공유된 쓰레드의 크기이며 중복된 키를 자주 사용할 경우 속도증진
- show status 의 Key_blocks_used 를 체크
Key_blocks_used * 1024 의 2~3 배 ... (메모리충분할 경우)
Key_blocks_used * 1024 (보통)
ex) 아래와 같은 상태가 될때가 key_buffer 가 적당..
Key_reads / Key_read_request < 0.01
key_write / Key_write_requests = 1
max_connections
- show status 의 max_used_connections 를 체크 (최대값보다 10% 크게 설정)
table_cache
- MySQL 서버가 한번에 열수 있는 테이블의 개수설정
- show status 의 Opened_tables 값이 클 경우 table_cache 를 늘림
- max_connections 값이 100 일 경우 100 * n (조인해서 열수 있는 최대테이블개수)
ex) 테이블 20 , max_connections 100 이라면
table_cache = 512
sort_buffer / record_buffer
- max_used_connections 의 값에 따라 증가
- 한번에 많은 쓰레드가 동시에 붙을 경우는 증가
- max_used_connections 가 높은 경우
sort_buffer=6M
record_buffer=2M
(sort_buffer + record_buffer < 8M)
- 메모리가 4G 정도 된다면 sort_buffer 값을 32M 정도를 잡는 것이 좋다.
- order by , group by 절을 빠르게 하기 위해서 sort_buffer 값을 증가시킬수 있다.
- 많은 연속적인 테이블 스캔이 이루어진다면 record_buffer 값을 증가
thread_cache / thread_concurrency
- cpu 개수 * 2
-- 퀴리캐시 설정 방법
set-variable = query_cache_limit=1M
set-variable = query_cache_size=2M
set-variable = query_cache_type=1
-> 쿼리캐시 사용 안할려면 query_cache_size = 0 으로 설정.
-> query_cache_type
1) 0 : off 쿼리캐시 기능을 사용하지 않음
2) 1 : on , SELECT SQL_NO_CACHE 를 제외하고 쿼리캐시사용
3) 2 : DEMAND, SELECT SQL_CACHE 사용시만 쿼리캐시사용
-> 쿼리캐시 변수보기
show variables like 'query%';
+-------------------+----------+
Variable_name Value
+-------------------+----------+
query_cache_limit 1048576
query_cache_size 33554432
query_cache_type ON
+-------------------+----------+
-> 쿼리캐시 상태보기
show status like 'qcache%';
+-------------------------+----------+
Variable_name Value
+-------------------------+----------+
Qcache_queries_in_cache 12780 : 캐시에 등록된 쿼리수
Qcache_inserts 2084642 : 캐시에 추가된 쿼리수
Qcache_hits 173194 : 캐시에 있는 쿼리를 사용한 수
Qcache_lowmem_prunes 361897
Qcache_not_cached 23724 : 쿼리를 캐시에 저장하지 않은 수
Qcache_free_memory 20055720 : 캐시가 남은 공간
Qcache_free_blocks 6237 : 쿼리캐시에서 남은 메모리 블록
Qcache_total_blocks 32000 : 쿼리캐시가 사용하는 총 블록 수
+-------------------------+----------+
-> FLUSH
FLUSH QUERY CACHE 쿼리 캐시를 재정렬하므로 메모리를 유용하게 사용하도록 해준다.
(단 쿼리캐시를 비우지는 않는다)
FLUSH TABLES 쿼리 캐시 버퍼를 비운다.
( Qcache_queries_in_cache = 0 , Qcache_table_blocks = 1
FLUSH QUERY CACHE 는 모든 쿼리 캐시를 삭제
-- 로그설정
log-isam=파일경로
log-slow-queries=파일경로
long_query_time=5
EX ) MySQL 메모리 사용량
innodb_buffer_pool_size
+ key_buffer
+ max_connections * (join_buffer + record_buffer + sort_buffer + thread_stack + tmp_table_size)
+ max_connections * 2MB
=================================================================
튜닝참조
=================================================================
1. Opened_tables가 크면 table_cache variable의 값이 너무 작은것일지도 모른다
2. key_reads가 크면 key_cach의 값이 너무 작은것일지도 모른다
3. cache hit rate은 key_reads/key_read_requests이다
4. Handler_read_rnd가 크면 MySQL의 모든 테이블을 스캔하는 많은 쿼리가 있다거나 key를 적절히 사용하지 않는 조인들이 있을지 모른다
5. Threads_created가 크면 thread_cache_size값을 증가시키기를 바랄수도 있다
6. Created_tmp_disk_tables이 크면 디스크대신 임시테이블메모리를 얻기위해 tmp_table_size값을 증가시키기를 원할 수있다
7. 기본적으로 support-files밑에 my-huge.cnf, my-large.cnf, my-medium.cnf, my-small.cnf 를 기본으로 my.cnf 로 바꾸어 사용하면서 조정한다.
- memory (>=256M)이고 많은 테이블이 있으며, 적당한 클라이언트수에서 최고 성능을 유지하기 위해
shell> safe_mysqld -O key_buffer=64M -O table_cache=256 -O sort_buffer=4M -O record_buffer=1M &
이러한 옵션으로 서버를 실행하는데, my-cnf에서 이를 수정하여 사용하면 될 것이다.
- 128M메모리에 테이블이 적지만, 정렬이 많을 때
shell> mysqld_safe -O key_buffer=16M -O sort_buffer=1M
- 메모리는 적지만 많은 연결이 있을 때
shell> mysqld_safe -O key_buffer=512k -O sort_buffer=100k -O record_buffer=100k &
또는
shell> mysqld_safe -O key_buffer=512k -O sort_buffer=16k -O table_cache=32 -O record_buffer=8k -O net_buffer=1K &
8. group by와 order by작업이 가지고 있는 메모리보다 훨씬 클 경우, 정렬 후 row 읽는 것을 빠르게 하기위해 record_buffer값을 증가시켜라
[출처] my.cnf 설정파일작성자 아진
my.cnf
=================================================================
-- 용도별 카피
my-small.cnf : 64M
my-medium.cnf : 128-256M
my-large.cnf : 512M
my-huge.cnf : 1~2G
[mysqld]
key_buffer
- 인덱스를 위한 버퍼 공간
- 키버퍼의 크기는 공유된 쓰레드의 크기이며 중복된 키를 자주 사용할 경우 속도증진
- show status 의 Key_blocks_used 를 체크
Key_blocks_used * 1024 의 2~3 배 ... (메모리충분할 경우)
Key_blocks_used * 1024 (보통)
ex) 아래와 같은 상태가 될때가 key_buffer 가 적당..
Key_reads / Key_read_request < 0.01
key_write / Key_write_requests = 1
max_connections
- show status 의 max_used_connections 를 체크 (최대값보다 10% 크게 설정)
table_cache
- MySQL 서버가 한번에 열수 있는 테이블의 개수설정
- show status 의 Opened_tables 값이 클 경우 table_cache 를 늘림
- max_connections 값이 100 일 경우 100 * n (조인해서 열수 있는 최대테이블개수)
ex) 테이블 20 , max_connections 100 이라면
table_cache = 512
sort_buffer / record_buffer
- max_used_connections 의 값에 따라 증가
- 한번에 많은 쓰레드가 동시에 붙을 경우는 증가
- max_used_connections 가 높은 경우
sort_buffer=6M
record_buffer=2M
(sort_buffer + record_buffer < 8M)
- 메모리가 4G 정도 된다면 sort_buffer 값을 32M 정도를 잡는 것이 좋다.
- order by , group by 절을 빠르게 하기 위해서 sort_buffer 값을 증가시킬수 있다.
- 많은 연속적인 테이블 스캔이 이루어진다면 record_buffer 값을 증가
thread_cache / thread_concurrency
- cpu 개수 * 2
-- 퀴리캐시 설정 방법
set-variable = query_cache_limit=1M
set-variable = query_cache_size=2M
set-variable = query_cache_type=1
-> 쿼리캐시 사용 안할려면 query_cache_size = 0 으로 설정.
-> query_cache_type
1) 0 : off 쿼리캐시 기능을 사용하지 않음
2) 1 : on , SELECT SQL_NO_CACHE 를 제외하고 쿼리캐시사용
3) 2 : DEMAND, SELECT SQL_CACHE 사용시만 쿼리캐시사용
-> 쿼리캐시 변수보기
show variables like 'query%';
+-------------------+----------+
Variable_name Value
+-------------------+----------+
query_cache_limit 1048576
query_cache_size 33554432
query_cache_type ON
+-------------------+----------+
-> 쿼리캐시 상태보기
show status like 'qcache%';
+-------------------------+----------+
Variable_name Value
+-------------------------+----------+
Qcache_queries_in_cache 12780 : 캐시에 등록된 쿼리수
Qcache_inserts 2084642 : 캐시에 추가된 쿼리수
Qcache_hits 173194 : 캐시에 있는 쿼리를 사용한 수
Qcache_lowmem_prunes 361897
Qcache_not_cached 23724 : 쿼리를 캐시에 저장하지 않은 수
Qcache_free_memory 20055720 : 캐시가 남은 공간
Qcache_free_blocks 6237 : 쿼리캐시에서 남은 메모리 블록
Qcache_total_blocks 32000 : 쿼리캐시가 사용하는 총 블록 수
+-------------------------+----------+
-> FLUSH
FLUSH QUERY CACHE 쿼리 캐시를 재정렬하므로 메모리를 유용하게 사용하도록 해준다.
(단 쿼리캐시를 비우지는 않는다)
FLUSH TABLES 쿼리 캐시 버퍼를 비운다.
( Qcache_queries_in_cache = 0 , Qcache_table_blocks = 1
FLUSH QUERY CACHE 는 모든 쿼리 캐시를 삭제
-- 로그설정
log-isam=파일경로
log-slow-queries=파일경로
long_query_time=5
EX ) MySQL 메모리 사용량
innodb_buffer_pool_size
+ key_buffer
+ max_connections * (join_buffer + record_buffer + sort_buffer + thread_stack + tmp_table_size)
+ max_connections * 2MB
=================================================================
튜닝참조
=================================================================
1. Opened_tables가 크면 table_cache variable의 값이 너무 작은것일지도 모른다
2. key_reads가 크면 key_cach의 값이 너무 작은것일지도 모른다
3. cache hit rate은 key_reads/key_read_requests이다
4. Handler_read_rnd가 크면 MySQL의 모든 테이블을 스캔하는 많은 쿼리가 있다거나 key를 적절히 사용하지 않는 조인들이 있을지 모른다
5. Threads_created가 크면 thread_cache_size값을 증가시키기를 바랄수도 있다
6. Created_tmp_disk_tables이 크면 디스크대신 임시테이블메모리를 얻기위해 tmp_table_size값을 증가시키기를 원할 수있다
7. 기본적으로 support-files밑에 my-huge.cnf, my-large.cnf, my-medium.cnf, my-small.cnf 를 기본으로 my.cnf 로 바꾸어 사용하면서 조정한다.
- memory (>=256M)이고 많은 테이블이 있으며, 적당한 클라이언트수에서 최고 성능을 유지하기 위해
shell> safe_mysqld -O key_buffer=64M -O table_cache=256 -O sort_buffer=4M -O record_buffer=1M &
이러한 옵션으로 서버를 실행하는데, my-cnf에서 이를 수정하여 사용하면 될 것이다.
- 128M메모리에 테이블이 적지만, 정렬이 많을 때
shell> mysqld_safe -O key_buffer=16M -O sort_buffer=1M
- 메모리는 적지만 많은 연결이 있을 때
shell> mysqld_safe -O key_buffer=512k -O sort_buffer=100k -O record_buffer=100k &
또는
shell> mysqld_safe -O key_buffer=512k -O sort_buffer=16k -O table_cache=32 -O record_buffer=8k -O net_buffer=1K &
8. group by와 order by작업이 가지고 있는 메모리보다 훨씬 클 경우, 정렬 후 row 읽는 것을 빠르게 하기위해 record_buffer값을 증가시켜라
[출처] my.cnf 설정파일작성자 아진
2007년 7월 12일 목요일
테이블 속성 변경
테이블 속성 변경
1. 테이블의 필드명을 다른 이름으로 변경
mysql>alter table 테이블명 change 기존필드명 바꿀필드명 바뀐필드타입;
2. 기존 필드의 타입을 다른 타입으로 변경
mysql>alter table 테이블명 modify 필드명 바꿀필드타입;
3. 테이블에 새로운 필드 추가
mysql>alter table 테이블명 add 추가할필드명 필드타입;
*추가할 필드를 기존 테이블의 제일 마지막에 위치
mysql>alter table 테이블명 add 추가할필드명 필드타입;
*추가할 필드를 기존 테이블의 제일 첫번째에 위치
mysql>alter table 테이블명 add 추가할필드명 필드타입 first;
*추가할 필드를 기존 테이블의 중간에 위치
mysql>alter table 테이블명 add 추가할필드명 필드타입 after 생성될필드가 위치할 앞 필드명;
4. 특정한 필드 삭제
mysql>alter table 테이블명 drop 삭제할필드명;
5. 테이블명 변경
mysql>alter table 테이블명 rename 바뀔테이블명;
1. 테이블의 필드명을 다른 이름으로 변경
mysql>alter table 테이블명 change 기존필드명 바꿀필드명 바뀐필드타입;
2. 기존 필드의 타입을 다른 타입으로 변경
mysql>alter table 테이블명 modify 필드명 바꿀필드타입;
3. 테이블에 새로운 필드 추가
mysql>alter table 테이블명 add 추가할필드명 필드타입;
*추가할 필드를 기존 테이블의 제일 마지막에 위치
mysql>alter table 테이블명 add 추가할필드명 필드타입;
*추가할 필드를 기존 테이블의 제일 첫번째에 위치
mysql>alter table 테이블명 add 추가할필드명 필드타입 first;
*추가할 필드를 기존 테이블의 중간에 위치
mysql>alter table 테이블명 add 추가할필드명 필드타입 after 생성될필드가 위치할 앞 필드명;
4. 특정한 필드 삭제
mysql>alter table 테이블명 drop 삭제할필드명;
5. 테이블명 변경
mysql>alter table 테이블명 rename 바뀔테이블명;
2007년 7월 9일 월요일
MySQL Table 복구 - Got error 127 from storage engine
1. 에러 메세지
ERROR 1030 (HY000): Got error 127 from storage engine
2. 복구 절차
Analyze Table `Table Name`
Repair Table `Table Name`
3. 예제보기
mysql> SELECT COUNT(A.IDX) AS 'CNT' FROM PRO_QNA_T A WHERE A.TYPE > 0;
ERROR 1030 (HY000): Got error 127 from storage engine
mysql>
mysql>
mysql> Analyze PRO_QNA_T;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PRO_QNA_T' at line 1
mysql> Analyze Table PRO_QNA_T;
+--------------------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------+---------+----------+----------+
| ihelpers.PRO_QNA_T | analyze | status | OK |
+--------------------+---------+----------+----------+
1 row in set (0.01 sec)
mysql> Repair Table PRO_QNA_T;
+--------------------+--------+----------+--------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+--------------------+--------+----------+--------------------------------------------+
| ihelpers.PRO_QNA_T | repair | info | Key 1 - Found wrong stored record at 24884 |
| ihelpers.PRO_QNA_T | repair | warning | Number of rows changed from 2187 to 2186 |
| ihelpers.PRO_QNA_T | repair | status | OK |
+--------------------+--------+----------+--------------------------------------------+
3 rows in set (0.17 sec)
mysql> Analyze Table PRO_QNA_T;
+--------------------+---------+----------+-----------------------------+
| Table | Op | Msg_type | Msg_text |
+--------------------+---------+----------+-----------------------------+
| ihelpers.PRO_QNA_T | analyze | status | Table is already up to date |
+--------------------+---------+----------+-----------------------------+
1 row in set (0.00 sec)
mysql> SELECT COUNT(A.IDX) AS 'CNT' FROM PRO_QNA_T A WHERE A.TYPE > 0;
+------+
| CNT |
+------+
| 2186 |
+------+
1 row in set (0.01 sec)
ERROR 1030 (HY000): Got error 127 from storage engine
2. 복구 절차
Analyze Table `Table Name`
Repair Table `Table Name`
3. 예제보기
mysql> SELECT COUNT(A.IDX) AS 'CNT' FROM PRO_QNA_T A WHERE A.TYPE > 0;
ERROR 1030 (HY000): Got error 127 from storage engine
mysql>
mysql>
mysql> Analyze PRO_QNA_T;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PRO_QNA_T' at line 1
mysql> Analyze Table PRO_QNA_T;
+--------------------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------+---------+----------+----------+
| ihelpers.PRO_QNA_T | analyze | status | OK |
+--------------------+---------+----------+----------+
1 row in set (0.01 sec)
mysql> Repair Table PRO_QNA_T;
+--------------------+--------+----------+--------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+--------------------+--------+----------+--------------------------------------------+
| ihelpers.PRO_QNA_T | repair | info | Key 1 - Found wrong stored record at 24884 |
| ihelpers.PRO_QNA_T | repair | warning | Number of rows changed from 2187 to 2186 |
| ihelpers.PRO_QNA_T | repair | status | OK |
+--------------------+--------+----------+--------------------------------------------+
3 rows in set (0.17 sec)
mysql> Analyze Table PRO_QNA_T;
+--------------------+---------+----------+-----------------------------+
| Table | Op | Msg_type | Msg_text |
+--------------------+---------+----------+-----------------------------+
| ihelpers.PRO_QNA_T | analyze | status | Table is already up to date |
+--------------------+---------+----------+-----------------------------+
1 row in set (0.00 sec)
mysql> SELECT COUNT(A.IDX) AS 'CNT' FROM PRO_QNA_T A WHERE A.TYPE > 0;
+------+
| CNT |
+------+
| 2186 |
+------+
1 row in set (0.01 sec)
2007년 5월 31일 목요일
MYSQL 함수 모음
1) 숫자 함수
ABS(X) : X 에 해당하는 절대 값을 돌려준다.
SIGN(X) : X의 값의 부호 값을 돌려 준다.(-1 : 음수, 0 : 0, 1 : 양수)
MOD(N,M) : N을 M으로 나눈 값의 나머지를 돌려 준다.
FLOOR(X) : 실수 X 값의 소수점 이하의 값은 버림을 한 정수 값을 돌려 준다.
CEILING(X) : 실수 X 값의 소수점 이하의 값을 올림을 한 정수 값을 돌려 준다.
ROUND(X,D) : 실수 X 값에서 소수점에서 D + 1번째에 해당하는 값을 올림한 값을 돌려 준다. POWER(X,Y) : X의 값을 Y번 곱한 값을 돌려 준다. RAND() : 0에서 1 사이의 숫자를 랜덤하게 발생시겨 돌려준다.
SELECT abs(-2),abs(2),sign(-45),sign(0),sign(34),mod(23,7);
SELECT floor(1,234),ceiling(1,234),round(2,49),round(2,51); SELECT power(3,2),power(3,3),rand();
문자열함수
2) 문자열 함수
CHAR(N,...) : N(1-256의 정소)값의 아스키코드를 해당 문자로 출력한다. CONCAT(str1,str2,...) : 각각의 str1,str2,...등을 하나의 스트링으로 돌려 준다. 단, NULL 이 있으면 NULL 을 출력한다.
CONCAT_WS(separator, str1, str2,...) : 각각의 str1,str2,...등을 separator을 구분자로 사용하여 하나의 스트링으로 출력한다.
LENGTH(str) : str의 문자의 길이를 출력한다.
SELECT char(48),char(76),concat(('My','S','ql'),concat('My',NULL,'Sq;');
SELECT concat_ws(',','My',NULL,'Sql',' ','is',' ','Good'); SELECT length('mysql'),locate('bar','foobarbar');
LOCATE(substr,str) : str에서 substr이 위치한 첫번째 위치를 정수 값으로 출력한다.
LEFT(str,len) : str에서 지정해준 자릿수 len만큼 왼쪽에서부터 문자열을 출력한다.
RIGHT(str,len) : str에서 지정해준 자릿수 len만큼 오른쪽에서부터 문자열을 출력한다.
SUBSTRING(str,pos,len) : 문자열 str에서 특정 시작위치 pos에서 지정된 길이 len만큼 문자를 출력한다.
LTRIM(str),RTRIM(str),TRIM(str) : str의 왼쪽,오른쪽,혹은 양쪽 모두의 공백 문자를 제거해 준다.
SELECT left('mysql is good',3),right('mysql is good',3); SELECT substring('mysql is good',1,5);
SELECT ltrim(' mysql'),rtrim(mysql '),trim(' mysql ');
SPACE(N) : N개 만큼의 공백 문자를 만들어 출력한다.
REPLACE(str,from_str,to_str) : 문자열 str에서 특정문자 from_str을 특정 문자 to_str로 바꾸어 출력한다.
REPEAT(str,count) : 문자열 str을 count 갯수만큼 반복하여 반복한 값을 출력한다.
REVERSE(str) : 문자열 str을 역으로 출력 한다.
INSERT(str,pos,len,newstr) : 문자열 str에서 특정 위치 pos에서 특정 길이 len 만큼을 newstr문자열로 바꾸어 출력한다.
SELECT concat('a',space(6),'a');
SELECT replace('mysql is good','is','very'),repeat('a',3); SELECT reverse('mysql'),insert('Quadratic',3,4,'What');
LCASE(str) : 문자열 str을 소문자로 바꾸어 출력한다.
UCASE(str) : 문자열 str을 대문자로 바꾸어 출력한다.
SELECT lcase('MYSQL'),ucase('mysql);
날짜시간함수
3) 날짜, 시간 함수
DAYOFWEEK(date) : 해당날짜의 요일값을 출력한다.(1=일요일,2=월요일,3=화요일,...,7=토요일)
WEEKDAY(date) : DayOfWeek() 함수와 같지만 요일값이 다르다.(0=월요일,1=화요일,...,6=일요일)
DAYOFMONTH(date) : 해당날짜의 날(1-31) 값을 출력한다.
DAYOFYEAR(date) : 일년중 몇번째 날(1-366)인지를 출력한다.
MONTH(date) : 해당 날짜의 달(1-12) 값을 출력한다.
DAYNAME(date) : 해당 날짜의 요일 값을 스트링으로 출력한다.
SELECT dayofweek('2003-02-22'),weekday('2003-02-23');
SELECT dayofmonth('2003-02-22'),dayofyear('2003-02-23'); SELECT month('2003-02-22),dayname('2003-02-23');
MONTHNAME(date) : 해당 날짜의 달 값을 스트링으로 출력한다.
QUARTER(date) : 총 4분기중 해당 날짜의 분기 수 값을 출력한다.
WEEK(date,first) : 해당날짜가 1년중 몇번째 주인지를 출력한다.
YEAR(date) : 해당 날짜의 년도 값을 출력한다.
YEARWEEK(date,first) : 해당 날짜의 년도와 1년중 몇번째 주인지를 출력한다.
HOUR(time) : 해당 시간의 시 값을 출력한다.
SELECT monthname('2003-02-22'),quarter('2003-02-23');
SELECT week('2003-02-22'),year('2003-02-23'); SELECT yearweek('2003-02-22'),hour('10:22:32');
MINUTE(time) : 해당 시간의 분 값을 출력한다.
SECOND(time) : 해당 시간의 초 값을 출력한다.
PERIOD_ADD(P,N) : P(YYMM or YYYYMM)값에서 N 달을 뺀 값을 출력한다.
PERIOD_DIFF(P1,P2) : P1(YYMM or YYYYMM)과 P2(YYMM or YYYYMM)의 달 차이를 출력한다.
TO_DAYS(date) : 0년 부터 date까지의 날 수를 출력한다.
FROM_DAYS(N) : N(날)에 해당하는 날짜를 출력한다.
SELECT minute('10:22:32'),second('10:22:32');
SELECT period_add(200302,3),period_diff(0302,200209); SELECT to_days(20030222),from_days(731633);
DATE_FORMAT(date,format) : date의 날짜 값을 원하는 format 값으로 바꾸어 출력한다.
TIME_FORMAT(time,format) : time의 시간 값을 원하는 format 값으로 바꾸어 출력한다.
CURDATE() : 현재의 날짜 값을 출력한다.
CURTIME() : 현재 시간을 출력한다.
NOW() : 현재 시스템의 날짜와 시간을 출력한다.
SELECT date_format('2003-02-22 22:23:00','%D %y %a %d %m %b %j');
SELECT time_format('22:23:00','%H %k %h %i %I %r %p %s %S'); SELECT curdate(),curtime(),now();
제어함수
4) 제어 함수
1) ~ 3)까지의 함수들은 이름만 들어도 대강은 어떤 함수일 거란 것을 예상 할 것이다. 그럼 제어 함수란 무엇인가. 이들 함수는 일반적인 프로그래밍 언어에서의 조건문과 같은 역할을 하는 함수들이다. 종류로는 IsNULL,NULLIF,IF,CASE등이 있으며 이들 함수로 인해 SQL문 안에서 값들을 제어 할 수가 있다.
IFNULL(expr1,expr2) : expr1 값이 널이면 expr2값이 출력이 되는 함수
NULLIF(expr1,expr2) : expr1 값과 expr2값이 같으면 NULL이 출력이 되고 다르면 expr1 값이 출력되는 함수
IF(expr1,expr2,expr3) : expr1 값이 참이면 expr2 값이 출력되고 거짓이면 expr3값이 출력되는 함수
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END : value 값이 WHEN 다음의 compare-value값과 같으면 THEN 다음의 result 값을 출력하는 함수
SELECT IFNULL(NULL,2),IFNULL(1,2),IF(1 > 0,1,0),IF(1 < id =" 'kim';" id =" a.ID)" id =" a.ID;">등을 서브쿼리(SubQuery)에서도 지원하고 있다. 이건 오픈 소스 데이터 베이스의 한계로 앞으로 이들 오픈 소스 데이터 베이스도 역시 지원을 할 것이다.
[오라클] 기본팁
<< 오라클 >>** 오라클 사용시 "commit;" 명령어 사용함 **
1. [테이블의 필드 확인] - desc 테이블명;-예) desc cybedu_board01;
2. [날짜 표현] - sysdate (MS-SQL에서는 getdate())-예) select sysdate from cybedu_section;
3. [중간 글 틀렸을때 수정] - c옵션은 변환, r옵션은 변환값으로 재실c행
예) SQL> 22* where substring(convert(varchar2(20),sysdate,120),1,10) >= 2004-07-29SQL> c/varchar2/varchar2* where substring(convert(varchar(20),sysdate,120),1,10) >= 2004-07-29SQL> 33* and substring(convert(varchar2(20),sysdate,120),1,10) <= 2004-08-05SQL> c/char2/char3* and substring(convert(varchar(20),sysdate,120),1,10) <= 2004-08-05SQL> r1 select popWidth, popHeight, popFlag from cybedu_popup2 where substring(convert(varchar(20),sysdate,120),1,10) >= 2004-07-293 and substring(convert(varchar(20),sysdate,120),1,10) <= 2004-08-054* order by 2004-07-29 desc, 2004-08-05 desc, popsn descwhere substring(convert(varchar(20),sysdate,120),1,10) >= 2004-07-29
=> 오라클에서는 substring -> substr, convert사용안함, varchar -> to_char로 사용* 아래는 문제 해결 구문 *
sql = "select popWidth, popHeight, popFlag from cybedu_popup"; sql = sql + " where substr(to_char(sysdate,'YYYY-MM-DD'),1,10) >= popstartday";sql = sql + " and substr(to_char(sysdate,'YYYY-MM-DD'),1,10) <= popendday";sql = sql + " order by popstartday desc, popendday desc, popsn desc"; 4. oracle에서 left outer join을 하시려면[MY-SQL]select aa.day,aa.count,bb.apply from (select day,count from tblCount where year='2004' and month='06') aa left outer join (select day, count(*) as apply from tblApply where year='2004' and month='06' and Deliverystate='신청접수' group by month,day) bb on aa.day = bb.day; [오라클]select aa.day,aa.count,bb.apply from (select day,count from tblCount where year='2004' and month='06') aa , (select day, count(*) as apply from tblApply where year='2004' and month='06' and Deliverystate='신청접수' group by month,day) bb where aa.day = bb.day(+) <--이런식으로 써야 outer join이 걸립니다... 5. 오라클에서 컬럼 자동 증가 하기create table cybedu_message ( msgid integer not null, /* 일련번호*/msgSendId varchar2 (10), /*쪽지보낸사람 ID*/ ~ ~ ~msgDate date, /* 쪽지보낸 날짜*/~ ~ ~msgFlagR varchar2 (2), /* 받은쪽지함에 보여지는 여부*/ primary key ( msgid ) ) ; create sequence msgid_seq; ==> 자동증가 (ms-sql: identity(1,1))
6. **** 오라클 기본 문법 ****삭제: delete from 테이블 이름 where 조건절 ;
[MS-SQL] 기본 사용법
1. CEILING -> 소숫점 아래수를 반올림해서 정수값 돌려줌
SELECT Count(*),CEILING(CAST(Count(*) AS FLOAT)/보여줄 페이지수)FROM 테이블명 WHERE search_word LIKE '%SearchString%'
rs.Open strSQL, dbcon
intTotalCount = rs(0) ' 총 페이지 수 (검색어가 있을때, 없을때)intTotalPage = rs(1) ' 보여줄 페이지 수의 값(intPageSize가 10이므로 10페이지씩 몇개를 보여줄지의 수)rs.Close
2. Top 숫자 -> 상위의 "숫자"만큼 뿌려줌
strSQL = "SELECT Top " & intNowPage * intPageSize & " brdnum, brdtitle, brdname, writedatetime, brdcount "strSQL = strSQL+ "FROM gong_news_board WHERE brdstate = '02' "if search_word <> "" thenstrSQL = strSQL & " AND " & search_word & " LIKE '%" & SearchString & "%'"end ifstrSQL = strSQL & " ORDER BY brdnum DESC"
3. ISNULL 사용법
예> SELECT EMPNO, ENAME, DEPTNO FROM EMP;
EMPNO ENAME DEPTNO SALARY--------------------------------------------01001 김갑돌 101 NULL01002 이몽룡 102 1000001003 홍길동 NULL NULL01004 고인돌 NULL 500001005 손오공 111 NULL
이러한 경우,
SELECT EMPNO, ENAME, ISNULL(DEPTNO,'999'), ISNULL(SALARY,0)FROM EMP;
EMPNO ENAME DEPTNO SALARY--------------------------------------------01001 김갑돌 101 001002 이몽룡 102 1000001003 홍길동 999 001004 고인돌 999 500001005 손오공 111 0
이와 같이 얻으실수 있습니다.
4. sql문 case -> if 문으로 변환
[case 문] [if 문]
select m.[번호] select m.[번호], m.[이름] , m.[이름], [회원구분] = , [회원구분] =case if ( when m.[번호] in ( m.[번호] in (select [번호] select [번호]from [정회원] as r ---> from [정회원] as rwhere r.[번호] = m.[번호] where r.[번호] = m.[번호]) )then '정' , '정'else '준' , '준')end , m.[전화번호] , m.[전화번호]from [회원] as m from [회원] as morder by m.[번호] order by m.[번호]
5. ** 해당 날짜 사이의 값 가져오기 **
select count(distinct lecNo) from cybedu_curriculum, cybedu_course, cybedu_section, cybedu_lecture left join cybedu_train on ( lecNo = traNo )where convert(varchar(10),getdate(),120) between secStartregist and secEndregistand secNo=lecSecno and crsCode=lecCrscodeand curCode = crsCurcode and curCode = 'curCode' and secFlag='0'
=> 설명 : from 뒤의 테이블과 join 뒤의 테이블을 left join해서(lecNo = traNo) 값중에서between뒤의 시작날짜와 종료날짜 사이의 값을 가져오라는것..
(아래 sql문은 업그레이드 한 것인거 같네여~)..위랑 같은 내용
select count(distinct lecNo) from cybedu_curriculum, cybedu_course, cybedu_section, cybedu_lecture left join cybedu_train on ( lecNo = traNo ) where convert(varchar(10),getdate(),120) between secStartregist and secEndregistand secNo=lecSecno and crsCode=lecCrscodeand curCode = crsCurcode and secFlag='secFlag' and curcode <> 'offline'
6. delete 구문delete 테이블명 where 조건문
7. update 구문update 테이블명 set 바꿀구문 where 조건구문
[MS-SQL] 중요팁2
----------------------------------<<>>-----------------------------------
1. 기본 쿼리sp_spaceused : DB사용자 정보 보여줌sp_dboption : 가능한 DB 옵션들sp_helpdb : 각DB이름,사이즈,owner등을 보여줌sp_helpdb 디비명 : 디비의 설명
2. 다른 DB의 테이블 불러서 사용하기- 우선 sql서버 엔터프라이즈 관리자에서/ENT01/users/ 사용자를 추가한다.- DB -> ENT01, 111
- 111에서 ENT01의 board14테이블 사용하려면
ex) select * from ENT01.111.board14 -> select * from 해당DB.테이블소유자명.테이블명
[MS-SQL] 중요팁
1. 오픈 쿼리 사용법
* 링크드 리스트가 설정이 되어 있어야 오픈쿼리 사용됨.(MS-SQL에서 사용됨)
------------------------------------ (사용예) ---------------------------------------/*sql = "select convert(varchar(20),user_id), convert(varchar(20),name), convert(varchar(20),jumin)";sql = sql + " from OPENQUERY(jejunet,'SELECT user_id, jumin, name FROM member_table') as member_table where (convert(varchar(20),name) = ?) and (substring(convert(varchar(20),jumin),1,6) = ?)";
pstmt = con.prepareStatement(sql);pstmt.setString(1,name);pstmt.setString(2,pass);rs = pstmt.executeQuery();if(rs.next()){student.setId(rs.getString(1)); */
sql = "select korname, usrjumin from cybedu_userinfo where (korname = ?) and (usrjumin = ?)"; //out.print(sql);
pstmt = con.prepareStatement(sql);pstmt.setString(1,name);pstmt.setString(2,pass);rs = pstmt.executeQuery();if(rs.next()){student.setId(rs.getString(1));--------------------------------------------------------------------------------------
2. 병렬 처리 사용 방법
* 생성시 같이 정의 create table line_item (item_no number(7), item_name varchar(20), ... ) parallel 20;create index item_index on line_item (item) parallel 20;
* 이미 작성된 오브젝트에 대한 병렬처리 alter table line_item parallel 20;alter index item_index rebuild parallel 20;응용프로그램의 수정없이 즉시 사용
* 해당 SQL만 병렬로 처리 : Hint 기능 사용 select /*+ parallel(line_item,20) */ item_name, ... from line_item, products .....
각종 DBMS JDBC 드라이버 셋팅법 정리
//********** 각 경우별 드라이버 연동하기 **************/
** JDK jdbc-odbc driver (Type1) **연결 URL : "jdbc:odbc:"드라이버 클래스 : sun.jdbc.odbc.JdbcOdbcDriver
** Oracle thin driver (Type4) **연결 URL : "jdbc:oracle:thin:@:port:"드라이버 클래스 : oracle.jdbc.driver.OracleDriver
** Oracle oci driver (Type2) **연결 URL : "jdbc:oracle:oci:@"드라이버 클래스 : oracle.jdbc.driver.OracleDriver
** Sybase jConnect driver (Type2) **연결 URL : "jdbc:sybase:Tds::"드라이버 클래스 : com.sybase.jdbc2.jdbc.SybDriver
** Informix JC1 driver (Type4) **연결 URL : "jdbc:informix-sql://:/:INFORMIXSERVER"드라이버 클래스 : com.informix.jdbc.IfxDriver
** mSQL Imaginary JDBC driver (Type4) **연결 URL : "jdbc:msql://:/"드라이버 클래스 : com.imaginary.sql.msql.MsqlDriver
** Postgres driver (Type4) **연결 URL : "jdbc:postgresql://:/"드라이버 클래스 : postgresql.driver
** MM MySQL driver (Type4) **연결 URL : "jdbc:mysql://:/"드라이버 클래스 : org.git.mm.mysql.Driver
mysql은 JConnector 3.0 부터는 com.mysql.jdbc.Driver
연결 URL 은 jdbc:mysql://localhost/dbname?Unicode=true&characterEncoding=EUC_KR
같이 인코딩 타입을 직접 줌으로써 한글 변환문제에 좀더 쉽게 해결할 수 있음.
// ******************************Connected To IBM AS/400
Class.forName("com.ibm.as400.access.AS400JDBCDriver"); com = Driver.Manager.getConnection("jdbc:as400://10.20.30.40/testlib;user=user;password=pass");
// ******************************Connected To Unisql
Class.forName("unisql.jdbc.driver.UniSQLDriver"); con = Driver.Manager.getConnection("jdbc:unisql:10.20.30.40:43300:demodb:::", "user","pass");
// ******************************Connected To Jdbc-Odbc Type - 1 Driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // con = DriverManager.getConnection("Jdbc:Odbc:dsnname","userid","password"); con = DriverManager.getConnection("jdbc:odbc:Driver={SQL Server};Server=servername;Database=pubs","userid","password");
// ******************************Connected To Ms-Access JDBC ODBC Driver .
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection("Jdbc:Odbc:dsnname","",""); // con = DriverManager.getConnection("jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=G:/admin.mdb","","");
// ******************************Connected To Ms-Access Type-3 Driver.
Class.forName ("acs.jdbc.Driver"); String url = "jdbc:atinav:servername:5000:C:\admin.mdb"; String username="Admin"; String password=""; Connection con = DriverManager.getConnection(url,username,password);
// ******************************Connected To Microsoft SQL.
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); con = DriverManager.getConnection("jdbc:microsoft:sqlserver://servername:1433","userid","password");
// ******************************Connected To Merant.
Class.forName("com.merant.datadirect.jdbc.sqlserver.SQLServerDriver"); con = DriverManager.getConnection("jdbc:merant:sqlserver://servername:1433;User=userid;Password=password");
// ******************************Connected To Atinav SqlServer.
Class.forName ("net.avenir.jdbc2.Driver"); con= DriverManager.getConnection("jdbc:AvenirDriver://servername:1433/pubs","userid","password");
// ******************************Connected To J-Turbo.
String server="servername"; String database="pubs"; String user="userid"; String password="password";
Class.forName("com.ashna.jturbo.driver.Driver"); con= DriverManager.getConnection("jdbc:JTurbo://"+server+"/"+database,user,password);
// ******************************Connected To jk Jdbc Driver.
String url= "jdbc:jk:server@pubs:1433"; Properties prop = new Properties(); prop.put("user","userid");//Set the user name prop.put("password","password");//Set the password
Class.forName ("com.jk.jdbc.Driver").newInstance(); con = DriverManager.getConnection (url, prop);*/
// ******************************Connected To jNetDirect Type - 4 Driver
String sConnect = "jdbc:JSQLConnect://127.0.0.1/database=pubs&user=userid&password=password"; Class.forName ("com.jnetdirect.jsql.JSQLDriver").newInstance(); Connection con= DriverManager.getConnection(sConnect);
// ******************************Connected To AvenirDriver Type - 4 Driver
// String url= "jdbc: AvenirDriver: //servername:1433/pubs"; // java.util.Properties prop = new java.util.Properties (); // prop.put("user","userid"); // prop.put("password","password");
Class.forName ("net.avenir.jdbc2.Driver"); System.out.println(" Connected To AvenirDriver Type - 4 Driver"); con= DriverManager.getConnection("jdbc:AvenirDriver://servername:1433/pubs","userid","password");
// ******************************Connected To iNet Sprinta2000 Type - 4 Driver
String url="jdbc:inetdae7:servername:1433"; String login="userid"; String password="password"; Class.forName("com.inet.tds.TdsDriver"); System.out.println(" Connected To iNet Sprinta2000 Type - 4 Driver"); con=DriverManager.getConnection(url,login,password);
// ******************************Connected To iNet Opta2000 Type - 4 Driver String url="jdbc:inetdae7:servername:1433"; String login="sagar"; String password="sagar"; Class.forName("com.inet.tds.TdsDriver").newInstance(); System.out.println(" Connected To iNet Opta2000 Type - 4 Driver"); con=DriverManager.getConnection(url,login,password);
출처 : http://blog.empas.com/yooncom77/18149708
(출처 : BoKi - http://boki.tistory.com/9)
ABS(X) : X 에 해당하는 절대 값을 돌려준다.
SIGN(X) : X의 값의 부호 값을 돌려 준다.(-1 : 음수, 0 : 0, 1 : 양수)
MOD(N,M) : N을 M으로 나눈 값의 나머지를 돌려 준다.
FLOOR(X) : 실수 X 값의 소수점 이하의 값은 버림을 한 정수 값을 돌려 준다.
CEILING(X) : 실수 X 값의 소수점 이하의 값을 올림을 한 정수 값을 돌려 준다.
ROUND(X,D) : 실수 X 값에서 소수점에서 D + 1번째에 해당하는 값을 올림한 값을 돌려 준다. POWER(X,Y) : X의 값을 Y번 곱한 값을 돌려 준다. RAND() : 0에서 1 사이의 숫자를 랜덤하게 발생시겨 돌려준다.
SELECT abs(-2),abs(2),sign(-45),sign(0),sign(34),mod(23,7);
SELECT floor(1,234),ceiling(1,234),round(2,49),round(2,51); SELECT power(3,2),power(3,3),rand();
문자열함수
2) 문자열 함수
CHAR(N,...) : N(1-256의 정소)값의 아스키코드를 해당 문자로 출력한다. CONCAT(str1,str2,...) : 각각의 str1,str2,...등을 하나의 스트링으로 돌려 준다. 단, NULL 이 있으면 NULL 을 출력한다.
CONCAT_WS(separator, str1, str2,...) : 각각의 str1,str2,...등을 separator을 구분자로 사용하여 하나의 스트링으로 출력한다.
LENGTH(str) : str의 문자의 길이를 출력한다.
SELECT char(48),char(76),concat(('My','S','ql'),concat('My',NULL,'Sq;');
SELECT concat_ws(',','My',NULL,'Sql',' ','is',' ','Good'); SELECT length('mysql'),locate('bar','foobarbar');
LOCATE(substr,str) : str에서 substr이 위치한 첫번째 위치를 정수 값으로 출력한다.
LEFT(str,len) : str에서 지정해준 자릿수 len만큼 왼쪽에서부터 문자열을 출력한다.
RIGHT(str,len) : str에서 지정해준 자릿수 len만큼 오른쪽에서부터 문자열을 출력한다.
SUBSTRING(str,pos,len) : 문자열 str에서 특정 시작위치 pos에서 지정된 길이 len만큼 문자를 출력한다.
LTRIM(str),RTRIM(str),TRIM(str) : str의 왼쪽,오른쪽,혹은 양쪽 모두의 공백 문자를 제거해 준다.
SELECT left('mysql is good',3),right('mysql is good',3); SELECT substring('mysql is good',1,5);
SELECT ltrim(' mysql'),rtrim(mysql '),trim(' mysql ');
SPACE(N) : N개 만큼의 공백 문자를 만들어 출력한다.
REPLACE(str,from_str,to_str) : 문자열 str에서 특정문자 from_str을 특정 문자 to_str로 바꾸어 출력한다.
REPEAT(str,count) : 문자열 str을 count 갯수만큼 반복하여 반복한 값을 출력한다.
REVERSE(str) : 문자열 str을 역으로 출력 한다.
INSERT(str,pos,len,newstr) : 문자열 str에서 특정 위치 pos에서 특정 길이 len 만큼을 newstr문자열로 바꾸어 출력한다.
SELECT concat('a',space(6),'a');
SELECT replace('mysql is good','is','very'),repeat('a',3); SELECT reverse('mysql'),insert('Quadratic',3,4,'What');
LCASE(str) : 문자열 str을 소문자로 바꾸어 출력한다.
UCASE(str) : 문자열 str을 대문자로 바꾸어 출력한다.
SELECT lcase('MYSQL'),ucase('mysql);
날짜시간함수
3) 날짜, 시간 함수
DAYOFWEEK(date) : 해당날짜의 요일값을 출력한다.(1=일요일,2=월요일,3=화요일,...,7=토요일)
WEEKDAY(date) : DayOfWeek() 함수와 같지만 요일값이 다르다.(0=월요일,1=화요일,...,6=일요일)
DAYOFMONTH(date) : 해당날짜의 날(1-31) 값을 출력한다.
DAYOFYEAR(date) : 일년중 몇번째 날(1-366)인지를 출력한다.
MONTH(date) : 해당 날짜의 달(1-12) 값을 출력한다.
DAYNAME(date) : 해당 날짜의 요일 값을 스트링으로 출력한다.
SELECT dayofweek('2003-02-22'),weekday('2003-02-23');
SELECT dayofmonth('2003-02-22'),dayofyear('2003-02-23'); SELECT month('2003-02-22),dayname('2003-02-23');
MONTHNAME(date) : 해당 날짜의 달 값을 스트링으로 출력한다.
QUARTER(date) : 총 4분기중 해당 날짜의 분기 수 값을 출력한다.
WEEK(date,first) : 해당날짜가 1년중 몇번째 주인지를 출력한다.
YEAR(date) : 해당 날짜의 년도 값을 출력한다.
YEARWEEK(date,first) : 해당 날짜의 년도와 1년중 몇번째 주인지를 출력한다.
HOUR(time) : 해당 시간의 시 값을 출력한다.
SELECT monthname('2003-02-22'),quarter('2003-02-23');
SELECT week('2003-02-22'),year('2003-02-23'); SELECT yearweek('2003-02-22'),hour('10:22:32');
MINUTE(time) : 해당 시간의 분 값을 출력한다.
SECOND(time) : 해당 시간의 초 값을 출력한다.
PERIOD_ADD(P,N) : P(YYMM or YYYYMM)값에서 N 달을 뺀 값을 출력한다.
PERIOD_DIFF(P1,P2) : P1(YYMM or YYYYMM)과 P2(YYMM or YYYYMM)의 달 차이를 출력한다.
TO_DAYS(date) : 0년 부터 date까지의 날 수를 출력한다.
FROM_DAYS(N) : N(날)에 해당하는 날짜를 출력한다.
SELECT minute('10:22:32'),second('10:22:32');
SELECT period_add(200302,3),period_diff(0302,200209); SELECT to_days(20030222),from_days(731633);
DATE_FORMAT(date,format) : date의 날짜 값을 원하는 format 값으로 바꾸어 출력한다.
TIME_FORMAT(time,format) : time의 시간 값을 원하는 format 값으로 바꾸어 출력한다.
CURDATE() : 현재의 날짜 값을 출력한다.
CURTIME() : 현재 시간을 출력한다.
NOW() : 현재 시스템의 날짜와 시간을 출력한다.
SELECT date_format('2003-02-22 22:23:00','%D %y %a %d %m %b %j');
SELECT time_format('22:23:00','%H %k %h %i %I %r %p %s %S'); SELECT curdate(),curtime(),now();
제어함수
4) 제어 함수
1) ~ 3)까지의 함수들은 이름만 들어도 대강은 어떤 함수일 거란 것을 예상 할 것이다. 그럼 제어 함수란 무엇인가. 이들 함수는 일반적인 프로그래밍 언어에서의 조건문과 같은 역할을 하는 함수들이다. 종류로는 IsNULL,NULLIF,IF,CASE등이 있으며 이들 함수로 인해 SQL문 안에서 값들을 제어 할 수가 있다.
IFNULL(expr1,expr2) : expr1 값이 널이면 expr2값이 출력이 되는 함수
NULLIF(expr1,expr2) : expr1 값과 expr2값이 같으면 NULL이 출력이 되고 다르면 expr1 값이 출력되는 함수
IF(expr1,expr2,expr3) : expr1 값이 참이면 expr2 값이 출력되고 거짓이면 expr3값이 출력되는 함수
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END : value 값이 WHEN 다음의 compare-value값과 같으면 THEN 다음의 result 값을 출력하는 함수
SELECT IFNULL(NULL,2),IFNULL(1,2),IF(1 > 0,1,0),IF(1 < id =" 'kim';" id =" a.ID)" id =" a.ID;">등을 서브쿼리(SubQuery)에서도 지원하고 있다. 이건 오픈 소스 데이터 베이스의 한계로 앞으로 이들 오픈 소스 데이터 베이스도 역시 지원을 할 것이다.
[오라클] 기본팁
<< 오라클 >>** 오라클 사용시 "commit;" 명령어 사용함 **
1. [테이블의 필드 확인] - desc 테이블명;-예) desc cybedu_board01;
2. [날짜 표현] - sysdate (MS-SQL에서는 getdate())-예) select sysdate from cybedu_section;
3. [중간 글 틀렸을때 수정] - c옵션은 변환, r옵션은 변환값으로 재실c행
예) SQL> 22* where substring(convert(varchar2(20),sysdate,120),1,10) >= 2004-07-29SQL> c/varchar2/varchar2* where substring(convert(varchar(20),sysdate,120),1,10) >= 2004-07-29SQL> 33* and substring(convert(varchar2(20),sysdate,120),1,10) <= 2004-08-05SQL> c/char2/char3* and substring(convert(varchar(20),sysdate,120),1,10) <= 2004-08-05SQL> r1 select popWidth, popHeight, popFlag from cybedu_popup2 where substring(convert(varchar(20),sysdate,120),1,10) >= 2004-07-293 and substring(convert(varchar(20),sysdate,120),1,10) <= 2004-08-054* order by 2004-07-29 desc, 2004-08-05 desc, popsn descwhere substring(convert(varchar(20),sysdate,120),1,10) >= 2004-07-29
=> 오라클에서는 substring -> substr, convert사용안함, varchar -> to_char로 사용* 아래는 문제 해결 구문 *
sql = "select popWidth, popHeight, popFlag from cybedu_popup"; sql = sql + " where substr(to_char(sysdate,'YYYY-MM-DD'),1,10) >= popstartday";sql = sql + " and substr(to_char(sysdate,'YYYY-MM-DD'),1,10) <= popendday";sql = sql + " order by popstartday desc, popendday desc, popsn desc"; 4. oracle에서 left outer join을 하시려면[MY-SQL]select aa.day,aa.count,bb.apply from (select day,count from tblCount where year='2004' and month='06') aa left outer join (select day, count(*) as apply from tblApply where year='2004' and month='06' and Deliverystate='신청접수' group by month,day) bb on aa.day = bb.day; [오라클]select aa.day,aa.count,bb.apply from (select day,count from tblCount where year='2004' and month='06') aa , (select day, count(*) as apply from tblApply where year='2004' and month='06' and Deliverystate='신청접수' group by month,day) bb where aa.day = bb.day(+) <--이런식으로 써야 outer join이 걸립니다... 5. 오라클에서 컬럼 자동 증가 하기create table cybedu_message ( msgid integer not null, /* 일련번호*/msgSendId varchar2 (10), /*쪽지보낸사람 ID*/ ~ ~ ~msgDate date, /* 쪽지보낸 날짜*/~ ~ ~msgFlagR varchar2 (2), /* 받은쪽지함에 보여지는 여부*/ primary key ( msgid ) ) ; create sequence msgid_seq; ==> 자동증가 (ms-sql: identity(1,1))
6. **** 오라클 기본 문법 ****삭제: delete from 테이블 이름 where 조건절 ;
[MS-SQL] 기본 사용법
1. CEILING -> 소숫점 아래수를 반올림해서 정수값 돌려줌
SELECT Count(*),CEILING(CAST(Count(*) AS FLOAT)/보여줄 페이지수)FROM 테이블명 WHERE search_word LIKE '%SearchString%'
rs.Open strSQL, dbcon
intTotalCount = rs(0) ' 총 페이지 수 (검색어가 있을때, 없을때)intTotalPage = rs(1) ' 보여줄 페이지 수의 값(intPageSize가 10이므로 10페이지씩 몇개를 보여줄지의 수)rs.Close
2. Top 숫자 -> 상위의 "숫자"만큼 뿌려줌
strSQL = "SELECT Top " & intNowPage * intPageSize & " brdnum, brdtitle, brdname, writedatetime, brdcount "strSQL = strSQL+ "FROM gong_news_board WHERE brdstate = '02' "if search_word <> "" thenstrSQL = strSQL & " AND " & search_word & " LIKE '%" & SearchString & "%'"end ifstrSQL = strSQL & " ORDER BY brdnum DESC"
3. ISNULL 사용법
예> SELECT EMPNO, ENAME, DEPTNO FROM EMP;
EMPNO ENAME DEPTNO SALARY--------------------------------------------01001 김갑돌 101 NULL01002 이몽룡 102 1000001003 홍길동 NULL NULL01004 고인돌 NULL 500001005 손오공 111 NULL
이러한 경우,
SELECT EMPNO, ENAME, ISNULL(DEPTNO,'999'), ISNULL(SALARY,0)FROM EMP;
EMPNO ENAME DEPTNO SALARY--------------------------------------------01001 김갑돌 101 001002 이몽룡 102 1000001003 홍길동 999 001004 고인돌 999 500001005 손오공 111 0
이와 같이 얻으실수 있습니다.
4. sql문 case -> if 문으로 변환
[case 문] [if 문]
select m.[번호] select m.[번호], m.[이름] , m.[이름], [회원구분] = , [회원구분] =case if ( when m.[번호] in ( m.[번호] in (select [번호] select [번호]from [정회원] as r ---> from [정회원] as rwhere r.[번호] = m.[번호] where r.[번호] = m.[번호]) )then '정' , '정'else '준' , '준')end , m.[전화번호] , m.[전화번호]from [회원] as m from [회원] as morder by m.[번호] order by m.[번호]
5. ** 해당 날짜 사이의 값 가져오기 **
select count(distinct lecNo) from cybedu_curriculum, cybedu_course, cybedu_section, cybedu_lecture left join cybedu_train on ( lecNo = traNo )where convert(varchar(10),getdate(),120) between secStartregist and secEndregistand secNo=lecSecno and crsCode=lecCrscodeand curCode = crsCurcode and curCode = 'curCode' and secFlag='0'
=> 설명 : from 뒤의 테이블과 join 뒤의 테이블을 left join해서(lecNo = traNo) 값중에서between뒤의 시작날짜와 종료날짜 사이의 값을 가져오라는것..
(아래 sql문은 업그레이드 한 것인거 같네여~)..위랑 같은 내용
select count(distinct lecNo) from cybedu_curriculum, cybedu_course, cybedu_section, cybedu_lecture left join cybedu_train on ( lecNo = traNo ) where convert(varchar(10),getdate(),120) between secStartregist and secEndregistand secNo=lecSecno and crsCode=lecCrscodeand curCode = crsCurcode and secFlag='secFlag' and curcode <> 'offline'
6. delete 구문delete 테이블명 where 조건문
7. update 구문update 테이블명 set 바꿀구문 where 조건구문
[MS-SQL] 중요팁2
----------------------------------<<>>-----------------------------------
1. 기본 쿼리sp_spaceused : DB사용자 정보 보여줌sp_dboption : 가능한 DB 옵션들sp_helpdb : 각DB이름,사이즈,owner등을 보여줌sp_helpdb 디비명 : 디비의 설명
2. 다른 DB의 테이블 불러서 사용하기- 우선 sql서버 엔터프라이즈 관리자에서/ENT01/users/ 사용자를 추가한다.- DB -> ENT01, 111
- 111에서 ENT01의 board14테이블 사용하려면
ex) select * from ENT01.111.board14 -> select * from 해당DB.테이블소유자명.테이블명
[MS-SQL] 중요팁
1. 오픈 쿼리 사용법
* 링크드 리스트가 설정이 되어 있어야 오픈쿼리 사용됨.(MS-SQL에서 사용됨)
------------------------------------ (사용예) ---------------------------------------/*sql = "select convert(varchar(20),user_id), convert(varchar(20),name), convert(varchar(20),jumin)";sql = sql + " from OPENQUERY(jejunet,'SELECT user_id, jumin, name FROM member_table') as member_table where (convert(varchar(20),name) = ?) and (substring(convert(varchar(20),jumin),1,6) = ?)";
pstmt = con.prepareStatement(sql);pstmt.setString(1,name);pstmt.setString(2,pass);rs = pstmt.executeQuery();if(rs.next()){student.setId(rs.getString(1)); */
sql = "select korname, usrjumin from cybedu_userinfo where (korname = ?) and (usrjumin = ?)"; //out.print(sql);
pstmt = con.prepareStatement(sql);pstmt.setString(1,name);pstmt.setString(2,pass);rs = pstmt.executeQuery();if(rs.next()){student.setId(rs.getString(1));--------------------------------------------------------------------------------------
2. 병렬 처리 사용 방법
* 생성시 같이 정의 create table line_item (item_no number(7), item_name varchar(20), ... ) parallel 20;create index item_index on line_item (item) parallel 20;
* 이미 작성된 오브젝트에 대한 병렬처리 alter table line_item parallel 20;alter index item_index rebuild parallel 20;응용프로그램의 수정없이 즉시 사용
* 해당 SQL만 병렬로 처리 : Hint 기능 사용 select /*+ parallel(line_item,20) */ item_name, ... from line_item, products .....
각종 DBMS JDBC 드라이버 셋팅법 정리
//********** 각 경우별 드라이버 연동하기 **************/
** JDK jdbc-odbc driver (Type1) **연결 URL : "jdbc:odbc:"드라이버 클래스 : sun.jdbc.odbc.JdbcOdbcDriver
** Oracle thin driver (Type4) **연결 URL : "jdbc:oracle:thin:@:port:"드라이버 클래스 : oracle.jdbc.driver.OracleDriver
** Oracle oci driver (Type2) **연결 URL : "jdbc:oracle:oci:@"드라이버 클래스 : oracle.jdbc.driver.OracleDriver
** Sybase jConnect driver (Type2) **연결 URL : "jdbc:sybase:Tds::"드라이버 클래스 : com.sybase.jdbc2.jdbc.SybDriver
** Informix JC1 driver (Type4) **연결 URL : "jdbc:informix-sql://:/:INFORMIXSERVER"드라이버 클래스 : com.informix.jdbc.IfxDriver
** mSQL Imaginary JDBC driver (Type4) **연결 URL : "jdbc:msql://:/"드라이버 클래스 : com.imaginary.sql.msql.MsqlDriver
** Postgres driver (Type4) **연결 URL : "jdbc:postgresql://:/"드라이버 클래스 : postgresql.driver
** MM MySQL driver (Type4) **연결 URL : "jdbc:mysql://:/"드라이버 클래스 : org.git.mm.mysql.Driver
mysql은 JConnector 3.0 부터는 com.mysql.jdbc.Driver
연결 URL 은 jdbc:mysql://localhost/dbname?Unicode=true&characterEncoding=EUC_KR
같이 인코딩 타입을 직접 줌으로써 한글 변환문제에 좀더 쉽게 해결할 수 있음.
// ******************************Connected To IBM AS/400
Class.forName("com.ibm.as400.access.AS400JDBCDriver"); com = Driver.Manager.getConnection("jdbc:as400://10.20.30.40/testlib;user=user;password=pass");
// ******************************Connected To Unisql
Class.forName("unisql.jdbc.driver.UniSQLDriver"); con = Driver.Manager.getConnection("jdbc:unisql:10.20.30.40:43300:demodb:::", "user","pass");
// ******************************Connected To Jdbc-Odbc Type - 1 Driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // con = DriverManager.getConnection("Jdbc:Odbc:dsnname","userid","password"); con = DriverManager.getConnection("jdbc:odbc:Driver={SQL Server};Server=servername;Database=pubs","userid","password");
// ******************************Connected To Ms-Access JDBC ODBC Driver .
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection("Jdbc:Odbc:dsnname","",""); // con = DriverManager.getConnection("jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=G:/admin.mdb","","");
// ******************************Connected To Ms-Access Type-3 Driver.
Class.forName ("acs.jdbc.Driver"); String url = "jdbc:atinav:servername:5000:C:\admin.mdb"; String username="Admin"; String password=""; Connection con = DriverManager.getConnection(url,username,password);
// ******************************Connected To Microsoft SQL.
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); con = DriverManager.getConnection("jdbc:microsoft:sqlserver://servername:1433","userid","password");
// ******************************Connected To Merant.
Class.forName("com.merant.datadirect.jdbc.sqlserver.SQLServerDriver"); con = DriverManager.getConnection("jdbc:merant:sqlserver://servername:1433;User=userid;Password=password");
// ******************************Connected To Atinav SqlServer.
Class.forName ("net.avenir.jdbc2.Driver"); con= DriverManager.getConnection("jdbc:AvenirDriver://servername:1433/pubs","userid","password");
// ******************************Connected To J-Turbo.
String server="servername"; String database="pubs"; String user="userid"; String password="password";
Class.forName("com.ashna.jturbo.driver.Driver"); con= DriverManager.getConnection("jdbc:JTurbo://"+server+"/"+database,user,password);
// ******************************Connected To jk Jdbc Driver.
String url= "jdbc:jk:server@pubs:1433"; Properties prop = new Properties(); prop.put("user","userid");//Set the user name prop.put("password","password");//Set the password
Class.forName ("com.jk.jdbc.Driver").newInstance(); con = DriverManager.getConnection (url, prop);*/
// ******************************Connected To jNetDirect Type - 4 Driver
String sConnect = "jdbc:JSQLConnect://127.0.0.1/database=pubs&user=userid&password=password"; Class.forName ("com.jnetdirect.jsql.JSQLDriver").newInstance(); Connection con= DriverManager.getConnection(sConnect);
// ******************************Connected To AvenirDriver Type - 4 Driver
// String url= "jdbc: AvenirDriver: //servername:1433/pubs"; // java.util.Properties prop = new java.util.Properties (); // prop.put("user","userid"); // prop.put("password","password");
Class.forName ("net.avenir.jdbc2.Driver"); System.out.println(" Connected To AvenirDriver Type - 4 Driver"); con= DriverManager.getConnection("jdbc:AvenirDriver://servername:1433/pubs","userid","password");
// ******************************Connected To iNet Sprinta2000 Type - 4 Driver
String url="jdbc:inetdae7:servername:1433"; String login="userid"; String password="password"; Class.forName("com.inet.tds.TdsDriver"); System.out.println(" Connected To iNet Sprinta2000 Type - 4 Driver"); con=DriverManager.getConnection(url,login,password);
// ******************************Connected To iNet Opta2000 Type - 4 Driver String url="jdbc:inetdae7:servername:1433"; String login="sagar"; String password="sagar"; Class.forName("com.inet.tds.TdsDriver").newInstance(); System.out.println(" Connected To iNet Opta2000 Type - 4 Driver"); con=DriverManager.getConnection(url,login,password);
출처 : http://blog.empas.com/yooncom77/18149708
(출처 : BoKi - http://boki.tistory.com/9)
2007년 5월 23일 수요일
MySQL-Standard-5.0.18 설치 방법
설치1.MySQL 설치.
1) cd /tmp
2) wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-standard-5.0.18-linux-i686-glibc23.tar.gz/from/http://mysql.byungsoo.net/
2) tar xvfz mysql-standard-5.0.18-linux-i686-glibc23.tar.gz
3) mv mysql-standard-5.0.18-linux-i686-glibc23 /usr/local/mysql
주의) /usr/local/mysql 폴더가 존재하는지 확인하고 있으면 반드시 지울것!
4) cd /usr/local/mysql
5) ./scripts/mysql_install_db
주의) 반드시 /usr/local/mysql 폴더에서 명령을 내릴 것! /usr/local/mysql/scripts로 들어가서 하지 마셈!
6) groupadd mysql
7) useradd -g mysql mysql
8) chown -R root /usr/local/mysql
9) chown -R mysql /usr/local/mysql/data
10) chgrp -R mysql /usr/local/mysql
11) chown -R root /usr/local/mysql/bin
12) ./bin/safe_mysqld --user=mysql &
주의)
[root@a1 mysql]# ./bin/safe_mysqld --user=mysql &
[1] 5948
[root@a1 mysql]#Starting mysqld daemon with databases from /usr/local/mysql/data (ENTER)
ENTER키를 치면 다시 프롬프트가 나타남
13) ps -ef | grep mysql
14) ./bin/mysqladmin -u root password "123456"
15) ./bin/mysql -p mysql
1) cd /tmp
2) wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-standard-5.0.18-linux-i686-glibc23.tar.gz/from/http://mysql.byungsoo.net/
2) tar xvfz mysql-standard-5.0.18-linux-i686-glibc23.tar.gz
3) mv mysql-standard-5.0.18-linux-i686-glibc23 /usr/local/mysql
주의) /usr/local/mysql 폴더가 존재하는지 확인하고 있으면 반드시 지울것!
4) cd /usr/local/mysql
5) ./scripts/mysql_install_db
주의) 반드시 /usr/local/mysql 폴더에서 명령을 내릴 것! /usr/local/mysql/scripts로 들어가서 하지 마셈!
6) groupadd mysql
7) useradd -g mysql mysql
8) chown -R root /usr/local/mysql
9) chown -R mysql /usr/local/mysql/data
10) chgrp -R mysql /usr/local/mysql
11) chown -R root /usr/local/mysql/bin
12) ./bin/safe_mysqld --user=mysql &
주의)
[root@a1 mysql]# ./bin/safe_mysqld --user=mysql &
[1] 5948
[root@a1 mysql]#Starting mysqld daemon with databases from /usr/local/mysql/data (ENTER)
ENTER키를 치면 다시 프롬프트가 나타남
13) ps -ef | grep mysql
14) ./bin/mysqladmin -u root password "123456"
15) ./bin/mysql -p mysql
피드 구독하기:
글 (Atom)