1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 총 페이지 구하기
select CEILING(count([mail_id])/30.0from MailBox
where limit_time > getdate() and [to] = 13400
 
 
-- 요청 페이지 가져오기
DECLARE @page_no int = 1            -- 페이지 번호
DECLARE @page_row_count int = 28    -- 한 페이지 열 개수
 
SELECT SequenceNo, [from], [to], itemType, receiveType, receiveTime, expireTime from Mailbox
WHERE receive_time < getdate()-1 and expireTime > getdate() and [to] = 13400
ORDER BY expireTime DESC 
OFFSET (@page_no - 1* @page_row_count ROW FETCH NEXT @page_row_count ROW ONLY
 
-- OFFSET (@page_no - 1) * @page_row_count  // 페이지의 시작 번호
-- ROW FETCH NEXT @page_row_count ROW ONLY  // 페이지의 끝 번호

 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- IN Condition
 
-- first_name 컬럼에 IN 오른쪽의 단어를 포함하고 있는 rows를 출력합니다.
SELECT *
FROM employees
WHERE first_name IN ('Sarah''Jane''Heather');
 
 
-- NOT IN은 반대의 의미로 포함되지 않은 rows를 출력합니다.
SELECT *
FROM employees
WHERE first_name NOT IN ('Sarah''Jane''Heather');
 
 
-- /* WHERE first_name = 'Sarah' OR first_name = 'Jane' OR first_name = 'Heather' */
-- 위의 문장과 비교하여 선호하는 방향의 문법을 사용하면 된다.
cs


정규식은 처음 접하면 암호 같다. 하지만 복잡한 상황에 조건이 필요한 경우 사용하게 되면 간단하게 해결 되는 경우가 있다. 그러므로 정규식은 꼭 학습이 필요하다.

1
2
3
-- float이 아닌 value를 찾는 정규식.
SELECT * FROM TestDB WHERE type='float' and trim(value) NOT REGEXP '^[+-]?\d*(\.?\d*)$'
 
cs



MSDN 정규식 구문 링크


일치 항목

/^\s*$/

빈 줄을 찾습니다.

/\d{2}-\d{5}/

2자리 숫자, 하이픈 및 추가 5자리 숫자로 구성된 ID 번호의 유효성을 검사합니다.

/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/

HTML 태그를 찾습니다.


'Databases > MS-SQL' 카테고리의 다른 글

[MS-SQL] 리스트 페이지 구하기  (0) 2020.03.23
[MSSQL] IN / NOT IN Condition  (0) 2016.03.10
[MS-SQL] 설치 버전 확인  (0) 2016.01.20
[MSSQL] lock 걸린 테이블 조회하기  (0) 2015.05.11
[MSSQL] 테이블 컬럼 존재 확인  (0) 2014.01.20

실행 중인 SQL Server 데이터베이스 엔진 버전 및 Edition을 확인하는 방법

SQL Server 버전을 확인하려면 다음 방법 중 하나를 사용할 수 있습니다.

방법 1: SQL Server Management Studio에서 개체 탐색기를 사용하여 서버에 연결합니다. 개체 탐색기가 연결되면 버전 정보가 괄호로 묶여 표시되고 해당 특정 SQL Server 인스턴스에 연결하는 데 사용된 사용자 이름이 표시됩니다.

방법 2: 해당 인스턴스에 대한 오류 로그 파일의 처음 몇 줄을 확인해봅니다. 기본적으로 오류 로그는 Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG 및 ERRORLOG.n 파일에 있습니다. 해당 항목은 다음과 비슷합니다.
2011-03-27 22:31:33.50 Server      Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)                 Mar 29 2009 10:11:52                 Copyright (c) 1988-2008 Microsoft Corporation                Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )
알고 있는 것처럼 이 항목은 제품에 대한 모든 필수 정보(예: 버전, 제품 수준, 64비트/32비트, SQL Server Edition 및 SQL Server가 실행 중인 OS 버전)를 제공합니다.

방법 3: SQL Server 인스턴스에 연결하고 다음 쿼리를 실행합니다.
Select @@version
이 쿼리의 출력 예는 다음과 같습니다.

Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)   Mar 29 2009 10:11:52   Copyright (c) 1988-2008 Microsoft Corporation  Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )


테이블 락 (TABLE LOCK) 걸린 경우 정보 검색이 필요하다면 사용하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
EXEC  sp_lock
 
==============================================================
-- sp_lock으로 검색해보면 ObjId가 존재하는데 조건문에 넣어주면 된다.
 
SELECT * FROM sysobjects WHERE  id = ObjId
 
==============================================================
-- Lock 걸린 spid 조회하기
DBCC  inputbuffer(spid)
 
==============================================================
-- Lock 걸린 spid 종료하기
KILL  spid
 
cs


테이블에 컬럼 검사 후 작업 수행을 하기 위해 IF문을 사용하는데 

보통의 경우 사용하는 쿼리는 다음과 같다.

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

SELECT * FROM T_BASE_NAME WHERE ID = 1111

IF @@ROWCOUNT <> 1

RETURN 1

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


IF NOT EXISTS 를 사용하면 다음과 같다.

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

IF NOT EXISTS (SELECT * FROM T_BASE_NAME  WHERE ID = 1111)

RETURN 1

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

테이블에 컬럼이 존재하는지 확인 후 없다면 RETURN 1을 수행하라.

1. 암호가 설정 안되는 경우

   # mongo

MongoDB shell version: 2.4.1
connecting to: test
> _

===================================================================

  # mongo <db_name>

MongoDB shell version: 2.4.1
connecting to: <db_name>
> _

 

 

 

2. 암호가 설정된 경우

  # mongo -u<user_ID> -p

MongoDB shell version: 2.4.1
Enter password:  _

===================================================================

  # mongo <db_name> -u<user_ID> -p

MongoDB shell version: 2.4.1
Enter password:  _

 

 

 

두 개 예제의 다른 점은 MongoDB의 존재하는 DB에 직접 접근하느냐의 차이다.

 

'Databases > MongoDB' 카테고리의 다른 글

[MongoDB] Replica set  (0) 2013.08.12
[MongoDB] 관리툴 링크 알려주는 페이지  (0) 2013.05.09

Replica set of MongoDB is site about information  :  http://docs.mongodb.org/manual/replication/

 

1. 용어 정리

Replica - 복제

shard - 분산 저장할 때 사용되는 물리적 장비

sharding - 대용량 DB에서 분산 저장하는 기술

 

 

Replica set은 Replication(복제)된 서버가 여유로 가지고 있음을 의미한다. 즉, Master , Slave로 구성된 하나의 묶음을 의미한다. 구성하는 이유는 DB에 장애가 났을 경우 Slave를 Master로 대체하여 사용할 수 있으므로 유연한 대처가 가능하므로 묶음으로 구성하여 사용한다.

 

Replica Set은 Master, Slave로 주로 구성하지만 Arbiter(아비터)를 추가하는 경우도 존재한다. 아비터는 HeartBeat를 체크하는 역할을 하는데 Master가 고장 났을 때 Slave를 Master로 만드는 역할 수행을 한다.

 

Replica set은 다양한 구성 방법이 존재한다. 위에 링크된 주소로 들어가면 아래와 같은 정보들을 열람할 수 있다.

Replica Set Members
Presents the components of replica sets.
Replica Set Deployment Architectures
Presents considerations for planning replica set deployments.
Replica Set High Availability
Presents the details of the automatic recovery process with replica sets.
Replica Set Read and Write Semantics
Presents the semantics for targeting read and write operations to the replica set.
Replication Processes
Presents the mechanics of the replication process and related topics.

 

 

 

'Databases > MongoDB' 카테고리의 다른 글

[MongoDB] DB 접속하기  (0) 2013.09.03
[MongoDB] 관리툴 링크 알려주는 페이지  (0) 2013.05.09

'Databases > MongoDB' 카테고리의 다른 글

[MongoDB] DB 접속하기  (0) 2013.09.03
[MongoDB] Replica set  (0) 2013.08.12

Replication DB 여러개 사용하는 방법은 간단하다.

Replication이 이미 설정이 완료되어 정상적으로 돌아간다는 전제로 설명할 예정이다. 


혹시 설정이 궁금하시다면 아래 설정 설명이 되어 있는 곳을 참조하면 된다.

링크 주소 : http://foxlime.tistory.com/70

 

1. my.cnf 파일 수정 (/etc/my.cnf)

 replicate-do-db=[DB Name]   << 추가 해 놓은 이 부분을 늘려주면 된다.

 

replicate-do-db= no1_data

replicate-do-db= no2_data

replicate-do-db= no3_data

 

저장하면 설정은 끝난다.

 

2. 데이터베이스 준비

우선 mysql 명령어로 접속하여 stop slave;를 해준 뒤

" no1_data, no2_data, no3_data" DB에 dump file을 밀어 넣어준다. 

 

 3. MySQL 재시작 그리고 slave 재시작

#> service mysqld restart

#> mysql -u[계정] -p

>start slave;

 

여러개의 DB를 replication하는 이유는 DB간의 서로 연결이 되어 있는 Query를 사용한다면 Query문제로 에러를 보게 된다. 이러한 에러를 해결하기 위해 필수적으로 Query문에서 Join을 사용한다면 꼭 필수적으로 여러개의 DB는 Replication되어야 한다.

'Databases > MYSQL' 카테고리의 다른 글

mysql - start / stop / restart  (0) 2013.01.03
mysql - 인덱스 정보 정리  (2) 2012.10.05
mysql - BinLog 파일 Text 변환  (0) 2012.02.27
mysql - Replication (Master/Slave 구조) 설정  (0) 2012.02.23
mysql - my.cnf 설정할 때 참고  (0) 2012.02.23

 MySQL  config flie - my.cnf

 /etc/my.cnf

 

[mysqld]

...............

slave-skip-errors=1062

..............

 

MySQL - start / stop /restart

 /etc/init.d/mysqld

 

# service mysqld start

# service mysqld stop

# service mysqld restart

 

인덱스를 사용해야 하는 경우는?

   - 데이터 양이 많고 검색이 변경보다 빈번한 경우

   - 필드의 값이 다양한 값을 가지는 경우

 

▷ 기존 테이블에 인덱스 추가

ALTER  TABLE  [테이블명]  ADD  INDEX(필드명(크기));

 

▷ 테이블 생성시 인덱스 추가하기
CREATE TABLE 테이블 명 ( 필드명 데이터타입(데이터크기),
INDEX(필드명(크기)) ENGINE MyISAM;

 

▷ FULLTEXT 인덱스 만들기

ALTER TABLE 테이블명 ADD FULLTEXT(필드명);


일반적인 인덱스와는 달리 MySQL의 FULLTEXT는 매우 빠르게 모든 텍스트 열을 검색한다. 검색 엔진과 유사한 방법으로 자연 언어를 이용해 검색할 수 있는 특별한 인덱스로 모든 데이터 문자열의 단어를 저장하기 때문이다.


참고사항
FULLTEXT 인덱스는 MySQL의 기본 저장 엔진 타입인 MyISAM 테이블에만 사용된다.
만약 테이블을 MyISAM 으로 변경해야 된다면
ALTER TABLE 테이블명 ENGINE = MyISAM;
FULLTEXT 인데스는 CHAR 와 VARCHAR, TEXT 열로만 생성 가능하다.

 

▷ 인덱스 정보 보기

SHOW  INDEX  FROM  [테이블명];

 

▷ 인덱스 삭제

ALTER  TABLE  [테이블명]  DROP  INDEX  [인덱스명];

 

 

* 이해를 돕기 위한 링크

http://www.sqler.com/392661


MySQL 로그 파일을 남기려면 다음과 같이 하면 된다.

# vi  /etc/my.cnf

log-bin=mysql-bin             # 한줄 추가하면 BinLog파일이 기록된다.


위의 내용을 저장하고 빠져 나온다음엔 MySQL을 재시작 해주어야 한다.

#service  mysqld restart

=======================================================================
BinLog 파일을 vi editer로 보면 깨지는 부분도 있어 보기 힘들다...ㅡㅡ;;

1. 먼저 BinLog파일을 텍스트로 변환한다.

#mysqlbinlog  [log 파일명]  >>  [파일명].sql


2. 파일이 너무 거대한 경우엔 사이즈에 맞게 나누는 명령어도 있다.

#split  -b  100000  [파일명].sql  [생성될 파일 경로]
=======================================================================

'Databases > MYSQL' 카테고리의 다른 글

mysql - start / stop / restart  (0) 2013.01.03
mysql - 인덱스 정보 정리  (2) 2012.10.05
mysql - Replication (Master/Slave 구조) 설정  (0) 2012.02.23
mysql - my.cnf 설정할 때 참고  (0) 2012.02.23
mysql - HeidiSQL Tool 소개  (0) 2012.01.20

1. 테스트에 사용된 소프트웨어 사양
   - CentOS 5.6
   - MySQL 5.0.xx

2. 사전 준비 및 주의 사항
   - master DB에 데이터가 존재하는 경우에는 Write(insert,update,delete 등) 동작을 하지 않는 상태에서 진행한다.

   2.1 계정생성 - Master DB
 # mysql -u root -p
Enter password: [암호 입력]

mysql> grant replication slave on *.* to
      -> 'user_name'@'user_host'  identified by 'user_password';

mysql> flush privileges;
 - 간단하게 설명하자면 replication slave 형태의 계정을 생성해주고 DB에 적용한다.

   2.2  기존 데이터 백업 - Master DB
mysql> flush tables with read lock;                #DB Write를 하지 않는다면 하지 않아도 된다.

#mysqldump -uroot -p [DB명] > xxxxxx.sql
# 백업(dump)를 했다면 Slave DB로 이동시켜 준다.

mysql> unlock tables;
 - Write 기능을 하지 못하도록 방어 후 dump한다라는 내용이다.

   2.3 데이터 적용 - Slave DB
#mysql -uroot -p < xxxxxx.sql 

* Master와 Slave DB가 모두 일치하다면 이제 cnf설정 단계로 넘어간다.
* Master와 Slave DB는 Replication이 다 끝날 때까지 Write(insert, update, delete)기능은 사용하지 않기를 바란다.


3. my.cnf 설정하기
   3.1  Master DB 설정
[mysqld]
log-bin=mysql-bin
server-id=1                                            #1~(2^32)-1 내의 숫자 중 아무거나 설정 가능.
binlog_do_db=  [Replication DB 명]          #여러 개의 DB인 경우 계속 추가하면 된다.

   3.2  Slave DB 설정
 [mysqld]
log-bin=mysql-bin
log-slave-update                                    #로그 업데이트

server-id=2                                            #1~(2^32)-1 내의 숫자 중 아무거나 설정 가능.
master-host = 127.0.0.1                            #마스터 서버의 IP
master-port = 3306                                  # 마스터 mysql 포트 번호
master-user = foxlime                              #마스터에서 만들어준 접속 계정명
master-password = xxxxxx                       #계정 비밀번호
master-connect-retry = 60
replicate-do-db = [Replication DB 명]       #master DB 설정에 입력해준 binlog_do_db 이름과 일치하게 입력
* Master와 Slave DB를 재시작 해준다. (재시작 명령 : service mysqld restart)


4. 정보 확인 및 정보 입력하기
   4.1  Master DB
mysql> show master status;
+------------------+----------+------------------------+------------------+
| File                     | Position   | Binlog_Do_DB               | Binlog_Ignore_DB |
+------------------+----------+------------------------+------------------+
| mysql-bin.000001  |       90     | TestData                       |                           |
+------------------+----------+------------------------+------------------+
1 row in set (0.00 sec)

File = MASTER_LOG_FILE
Position = MASTER_LOG_POS

   4.2  Slave DB
mysql> stop slave;

mysql> CHANGE MASTER TO
      -> MASTER_LOG_FILE= File 컬럼,
      -> MASTER_LOG_POS= Position 컬럼;

   4.3  최종 정보 확인
  - 정보를 확인은 필수이다. 잘 적용이 되었는지 이상없이 동작이 가능한지 여부를 알 수 있기 때문이다.
 * Master에서 명령
 mysql> show master status;

* Slave에서 명령
 mysql> show slave status\G;             # 보기 좋게 정리해서 나온다.

 mysql> start slave;
##################warning 또는 error만 없다면 정상 동작한다는 의미이다.

 mysql> show slave status\G;
      - 정보 확인 중에 [Slave_IO_State: Waiting for master to send event]를 제외한 문구는 오류이다.
        * 주의 : master에서 port또는 IP개방을 해주지 않는 경우가 종종 발생하므로 미리 확인이 필요하다.

 

'Databases > MYSQL' 카테고리의 다른 글

mysql - 인덱스 정보 정리  (2) 2012.10.05
mysql - BinLog 파일 Text 변환  (0) 2012.02.27
mysql - my.cnf 설정할 때 참고  (0) 2012.02.23
mysql - HeidiSQL Tool 소개  (0) 2012.01.20
mysql - Replication 정의  (0) 2012.01.16
1. my.cnf 설정할 때 참고할 수 있는 샘플 파일 위치

/usr/share/mysql 폴더에 mysql과 관련된 cnf 샘플 파일을 제공하고 있다.
샘플 파일들을 잘 활용하면 DB의 성능 향상에 도움이 된다.

* 리스트 첨부 *
-rw-r--r-- 1 root root   4925 2008-03-04 12:41 my-huge.cnf
-rw-r--r-- 1 root root  20923 2008-03-04 12:41 my-innodb-heavy-4G.cnf
-rw-r--r-- 1 root root   4901 2008-03-04 12:41 my-large.cnf
-rw-r--r-- 1 root root   4908 2008-03-04 12:41 my-medium.cnf
-rw-r--r-- 1 root root   2478 2008-03-04 12:41 my-small.cnf

 1-2. 최근 사용했던 내용 정리
   max_allowed_packet = 1000M      # 용량 큰 dump 파일을 밀어 넣을 때 오류가 생긴다면 이 수치를 높여주면 된다.
   log_bin=mysql-bin                      # mysql log 파일을 남길 때 사용한다. (/var/lib/mysql/파일명.0000001 생성됨)
   max_binlog_size=100M               # mysql log 파일 한개당 용량이며 용량이 다 되면 새로운 파일을 생성한다.
   expire_logs_days=7                    # mysql log 파일 보존 기간이다. (로그가 중요하다면 설정을 피한다)
   

> my.cnf 파일을 수정했다면 다음과 같은 명령어를 이용하여 mysql을 다시 시작해줘야 한다.
   service mysqld restart

'Databases > MYSQL' 카테고리의 다른 글

mysql - BinLog 파일 Text 변환  (0) 2012.02.27
mysql - Replication (Master/Slave 구조) 설정  (0) 2012.02.23
mysql - HeidiSQL Tool 소개  (0) 2012.01.20
mysql - Replication 정의  (0) 2012.01.16
mysql - 덤프하기 (mysqldump)  (0) 2011.10.07

회사에서 사용하는 무료툴이다...

리눅스 원격 접속하여 쿼리문을 날리면 알아보기 어렵다... 특히나 자료량이 방대할 때는 더더욱....그래서 HeidiSQL 툴을 사용중이다...

사진 출처 : www.heidisql.com



'Databases > MYSQL' 카테고리의 다른 글

mysql - Replication (Master/Slave 구조) 설정  (0) 2012.02.23
mysql - my.cnf 설정할 때 참고  (0) 2012.02.23
mysql - Replication 정의  (0) 2012.01.16
mysql - 덤프하기 (mysqldump)  (0) 2011.10.07
mysql - telnet으로 사용하기  (0) 2011.08.24

Replication을 조사하면서 여러가지 내용들을 알게 되었다...

MySQL Replication 이란?
  Master/Slave 서버를 각각 준비해 놓고 실시간으로 Master 데이터를 Slave로 동기화 하는 방법을 의미한다.

MySQL Replication 설계 구조
  - Master/Slaver
  - Master/Master

MySQL Replication 유용할 수 있는 내용
  - 부하 균형
  - 백업 및 복구

MySQL Replication을 왜 사용하는가?
  각자 역할 분담하여 부하 분산 효과를 가지기 위해 사용한다. Master 서버의 경우 INSERT, UPDATE, DELETE만 처리하고 Slave 서버는 SELECT 만 처리하도록 하여 분산 효과를 가질 수 있다. Master서버의 내용을 동기화로 모두 지니고 있는 Slave 서버는 서비스의 상황에 따라 단일 또는 다중으로 이루어질 수 있다.
  Master 서버가 동작 이상을 보였을 때 Slave 서버로 대체할 수 있는 잇점을 지니고 있다. 동기화만 제대로 되어 있다면 Slave 서버가 Master 서버로 변경하여 사용한다. 왜냐하면 Master 내용을 Slave가 모두 지니고 있기 때문이다.

DUMP와 Replication의 차이점
dump 기능은 실시간으로 데이터를 복사본으로 가지고 있을 수 없으므로 실시간으로 데이터 복원이 필요할 때 Replication 기능을 사용한다. 특정 시점으로 복원이 필요한 경우에는 dump를 사용도 유용하게 사용할 수 있다.
Replication에 사용하는 Log를 주기적으로 비워주지 않는다면 용랴으이 압박을 받을 수 있다는 사실도 명심해야 한다.
dump는 반대로 데이터의 누적으로 용량이 지속적으로 불어날 수 있다. 기간에 따라 용량의 압박을 받을 수도 있고 아닐 수도 있다.


마지막으로...
  Replication 도입은 대규모 회원이 존재하고 있는 가정으로 DB의 빠른 데이터 처리를 목적으로 보인다... DB의 경우 튜닝을 제대로 하지 않는 경우 DB 쿼리 밀림 현상이 발생되는 부분을 본적이 있다... 가장 많은 비중을 차지하는 부분을 별도로 떼어 놓고 중요한 write 기능을 수행할 수 있도록 하는 부분은 매력 있는것 같다... 아직은 미숙한 프로그래머이기에 정확히 어떻게 설계를 하는게 옳은지는 모르겠으나... 이 기능을 정확히 알고 활용하면 보다 효율적인 서버와 DB의 관계를 만들어 낼 수 있을 것 같다는 생각은 든다...

'Databases > MYSQL' 카테고리의 다른 글

mysql - my.cnf 설정할 때 참고  (0) 2012.02.23
mysql - HeidiSQL Tool 소개  (0) 2012.01.20
mysql - 덤프하기 (mysqldump)  (0) 2011.10.07
mysql - telnet으로 사용하기  (0) 2011.08.24
mysql - 날짜와 관련된 함수 정보 정리  (0) 2011.08.24

▷ mysql 덤프 기본 명령

    mysqldump  -u [계정]  -p [비번]  [DB이름]  >  파일명.sql


▷ mysql 덤프할 때 응용 명령

  // 로컬이 아닌 경우 다른 호스트 DB를 받아올 때 사용
   mysqldump  -u [계정]  -p  [비번]  -h [아이피]  [DB이름]  > 파일명.sql

  // 데이터 삭제 후 생성 금지로 덤프 받기 (데이터만 추가하는 경우에 사용)
   mysqldump  -u [계정]  -p  [비번]  -h [아이피]  [DB이름]  --no-create-info > 파일명.sql

  // 조건문 넣어서 덤프 하기
   mysqldump -u [계정]  -p [비번]  -w'startdate < curdate() and startdate > curdate()-1' [DB이름] > 파일명.sql


▷ mysql 덤프 파일을 밀어 넣기

   mysql  -u [계정]  -p [비번]  [DB이름]  <  파일명.sql


▷ 강제로 옵션주는 경우 (이 부분은 정확히 찾아보지 않고 기존의 코드를 보고 작성한 것임.)

    // 위의 명령이 안먹는 경우 아래 옵션을 해보는 방법을 ...
    -a -c -q -Q -e --no-create-info

'Databases > MYSQL' 카테고리의 다른 글

mysql - HeidiSQL Tool 소개  (0) 2012.01.20
mysql - Replication 정의  (0) 2012.01.16
mysql - telnet으로 사용하기  (0) 2011.08.24
mysql - 날짜와 관련된 함수 정보 정리  (0) 2011.08.24
mysql - 서브 쿼리 사용시 주의  (0) 2011.08.24

▷ mysql 접속
    mysql -u[사용자아이디] -p[비번]

    mysql -u[사용자아이디] -p[비번] [DB명]
    : DB에 바로 접속이 가능한 명령이다....

▷ mysql DB 사용
    USE [DB명]

▷ mysql DB & TABLE 보기
    SHOW databases;   / SHOW tables;

▷ 현재 상태 보기
    status



mysql에 접속하고 DB를 지정하지 않았다면 USE 명령을 사용하면 된다.
쿼리 명령은 동일하므로 패스!!
▷ 어디에선가 펌한거 같은데 사이트가 기억이 안난다... ^^;;;

- DAYOFWEEK(date) : 해당 날짜의 요일을 숫자로 반환한다. 일요일은 1, 토요일은 7 이다.

- : select DAYOFWEEK('1998-02-03');

 

- WEEKDAY(date) : 해당 날짜에 대한 요일을 반환한다. 월요일은 0, 일요일은 6 이다.

- : select WEEKDAY('1997-10-04 22:23:00');

 

- DAYOFYEAR(date) : 해당 날짜의 1 1일부터의 날수를 반환한다. 결과값은 1에서 366 까지이다.

- : select DAYOFYEAR('1998-02-03');

 

- YEAR(date) : 해당 날짜의 년을 반환한다.

- : select YEAR('98-02-03');

 

- MONTH(date) : 해당 날짜의 월을 반환한다.

- : select MONTH('1998-02-03');

 

- DAYOFMONTH(date) : 해당 날짜의 일을 반환한다. 결과값은 1 에서 31 까지이다.

- : select DAYOFMONTH('1998-02-03');

 

- HOUR(time) : 해당날짜의 시간을 반환한다. 결과값은 0 에서 23 이다.

- : select HOUR('10:05:03');

 

- MINUTE(time) : 해당날짜의 분을 반환한다. 결과값은 0 에서 59 이다.

- : select MINUTE('98-02-03 10:05:03');

 

- SECOND(time) : 해당날짜의 초를 반환한다. 결과값은 0 에서 59 이다.

- : select SECOND('10:05:03');

 

- DAYNAME(date) : 해당 날짜의 요일 이름을 반환한다. 일요일은 'Sunday' 이다.

- : select DAYNAME("1998-02-05");

 

- MONTHNAME(date) : 해당 날짜의 월 이름을 반환한다. 2월은 'February' 이다.

- : select MONTHNAME("1998-02-05");

 

- QUARTER(date) : 해당 날짜의 분기를 반환한다. 결과값은 1 에서 4 이다.

 

- WEEK(date,first) : 1 1일부터 해당날가지의 주 수를 반환한다. 주의 시작을 일요일부터 할경우는 두번째 인자를 0, 월요일부터 시작할 경우는 1 을 넣는다. 결과값은 1 에서 52 이다.

- : select WEEK('1998-02-20',1);

 

- PERIOD_ADD(P,N) : P (형식은 YYMM 또는 YYYYMM 이어야 한다.) N 만큼의 달 수를 더한값을 반환한다. 주의할것은 두번째 인자는 숫자라는 것이다.

- : select PERIOD_ADD(9801,2);

 

- PERIOD_DIFF(P1,P2) : 두개의 인자 사이의 달 수를 반환한다. 두개의 인자 모두 형식은 YYMM 또는 YYYYMM 이어야 한다.

 

- DATE_ADD(date,INTERVAL expr type) : 날짜를 더한 날짜를 반환한다.

- DATE_SUB(date,INTERVAL expr type) : 날짜를 뺀 날짜를 반환한다.

- ADDDATE(date,INTERVAL expr type) : DATE_ADD(date,INTERVAL expr type) 와 동일하다.

- SUBDATE(date,INTERVAL expr type) : DATE_SUB(date,INTERVAL expr type) 와 동일하다.

- EXTRACT(type FROM date) : 날짜에서 해당 부분을 추출한다.

- : SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 SECOND);

SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 DAY);

SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL "1:1" MINUTE_SECOND);

SELECT DATE_SUB("1998-01-01 00:00:00", INTERVAL "1 1:1:1" DAY_SECOND);

SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR);

SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);

SELECT EXTRACT(YEAR FROM "1999-07-02");

SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");

SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");

- 참고 : type 에 사용되는 키워드는 SECOND, MINUTE, HOUR, DAY, MONTH, YEAR, MINUTE_SECOND, HOUR_MINUTE, DAY_HOUR, YEAR_MONTH, HOUR_SECOND, DAY_MINUTE, DAY_SECOND 이다.

- 주의 : 계산한 달의 날수가 작을 경우는 해당달의 마지막 날을 반환한다. 예를 들어 select DATE_ADD('1998-01-30', Interval 1 month); 의 경우 1998-02-28 을 반환한다.

 

- TO_DAYS(date) : 0 년 부터의 날짜수를 반환한다. 이 함수는 1582 이전 날에 대해서는 계산하지 않는다.

- : select TO_DAYS(950501);

 

- FROM_DAYS(N) : 해당 숫자만큼의 날짜를 반환한다. 이 함수는 1582 이전 날에 대해서는 계산하지 않는다.

- : select FROM_DAYS(729669);

 

- DATE_FORMAT(date,format) : 날짜를 해당 형식의 문자열로 변환하여 반환한다.

- : select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');

select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');

select DATE_FORMAT('1997-10-04 22:23:00', '%D %y %a %d %m %b %j');

select DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w');

- 참고 : 형식은 다음과 같다. %M (달 이름), %W (요일 이름), %Y (YYYY 형식의 년도), %y (YY 형식의 년도), %a (요일 이름의 약자), %d (DD 형식의 날짜), %e (D 형식의 날짜), %m (MM 형식의 날짜), %c (M 형식의 날짜), %H (HH 형식의 시간, 24시간 형식), %k (H 형식의 시간, 24시간 형식), %h (HH 형식의 시간, 12시간 형식), %i (MM 형식의 분), %p (AM 또는 PM)

 

- TIME_FORMAT(time,format) : DATE_FORMAT(date,format) 과 같은 방식으로 사용할수 있으나 날 이상의 것에 대해서는 NULL 이나 0 을 반환한다.

 

- CURDATE() : 현재날짜를 반환한다. 숫자와 연산을 할경우 숫자로 변환된다. 형식은 'YYYY-MM-DD' 또는 YYYYMMDD 이다.

- : select CURDATE();

select CURDATE() + 0;

 

- CURTIME() : 현재시간을 반환한다. 숫자와 연산을 할경우 숫자로 변환된다. 형식은 'HH:MM:SS' 또는 HHMMSS 이다.

- : select CURTIME();

select CURTIME() + 0;

 

- SYSDATE() : 현재날짜시간을 반환한다. 숫자와 연산을 할경우 숫자로 변환된다. 형식은 'YYYY-MM-DD HH:MM:SS' 또는 YYYYMMDDHHMMSS 이다.

- : select NOW();

select NOW() + 0;

 

- NOW() : SYSDATE() 와 동일하다.

 

- UNIX_TIMESTAMP() : '1970-01-01 00:00:00' 부터의 초를 반환한다. 인자가 주어질 경우는 해당 날짜에 대한 유닉스 시간을 반환한다.

- : select UNIX_TIMESTAMP();

select UNIX_TIMESTAMP('1997-10-04 22:23:00');

 

- FROM_UNIXTIME(unix_timestamp) : 유닉스시간에서 날짜 형식으로 변환한다.

- : select FROM_UNIXTIME(875996580);

 

- FROM_UNIXTIME(unix_timestamp,format) : 유닉스시간을 날짜형식으로 변환하고 DATE_FORMAT(date,format) 에서 설명한 포맷으로 변환하여 반환한다.

- : select FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');

 

- TIME_TO_SEC(time) : 해당 시간의 0:0:0 에서부터의 초를 반환한다.

- : select TIME_TO_SEC('22:23:00');

 

- SEC_TO_TIME(seconds) : 초를 시간으로 바꾼다.

- : select SEC_TO_TIME(2378);

Error 1093 (ER_UPDATE_TABLE_USED)

SQLSTATE = HY000

Message = "You can't specify target table 'x'

for update in FROM clause"


이 에러는 다음과 같은 경우에 발생 한다.


UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);


여러분은 UPDATE문 내에서 할당을 위한 서브쿼리를 사용할 수 있는데 그 서브쿼리들은 SELECT문 뿐만 아니라 UPDATE DELETE문들 내에서 적합하기 때문이다. 그러나 서브쿼리의 FROM절과 업데이트 target모두를 위해 같은 테이블을 사용할 수 없다.


정리 : 동일한 테이블을 update하고 select하는건 위반이다!! 스토어드 프로시저를 이용해야 할것 같다.


▷ 한 머신에 다른 데이터베이스 접근 방법
   - [DB명].[테이블명] 형태로 접근이 가능하다.

▷ 각각 머신에 데이터베이스 접근 방법
   - MS-SQL처럼 접근은 불가능하다... 5.0부터 FEDERATED 방법을 사용해 보라는 글들이 많다...
   <링크 주소 : http://www.mysqlkorea.co.kr/sub.html?mcode=develop&scode=01&m_no=21940&cat1=14&cat2=427&cat3=460&lang=k >


▷ mysql 5.0 기준으로 소개된 글
There is a hard limit of 4096 columns per table, but the effective maximum may be less for a given table. The exact limit depends on several interacting factors.

<링크 주소 : http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html>


mysql : 3230 으로 안내하는 분들도 블로그에 보입니다.

아마도 높은 버전으로 상향되면서 지원되는 최대 컬럼수도 점차적으로 늘어난 것 같습니다...
어느정도 코드에 대한 분석이 끝나고 아이템 제작 및 개선 쪽으로 첫 업무를 맡게 되면서 프로시저를 사용이 필요한 상태가 되었다.... 프로시저를 책으로 봤지만 짧은 시간 봤던 이유로 정확히 활용 방법을 몰랐다....

회사 선배의 도움으로 무엇인지 알게 되었는데....
설명을 듣고 함수와 동일하게 동작하는 형태를 보고 결론은 함수와 동일하다로 결론 내렸다....

결론을 토대로 한번 정리해 보았다.... ^^;;;;  (MS-SQL 2000 기준으로 작성해 보았다...)

   프로시저 생성  CREATE  PROCEDURE  [생성이름] 

   매개변수 사용  @nName  int,
 @nTemp  char(13)
 AS

  변수 생성  DECLEAR  @nName  int

 변수 값 설정   SET @nName = 10

 SELECT @nName = strName FROM tableName
 WHERE NameType = 0 

  조건문  IF (@nName < 10)
      BEGIN
         -- TRUE인 경우 실행.
     END
 ELSE
      BEGIN
        -- FALSE인 경우 실행.
     END

  반복문  WHILE (@nName < 10)
    BEGIN
      -- 조건이 TRUE인 경우 계속 반복 수행한다.
    END

  반복문 추가  while (@nName < 10)
 begin
       if (@nName < 2)
       begin
            continue    -- while문에서 처음부터 다시 시작
       end
       break    -- while문에서 강제로 벗어난다.
 end


  랜덤값 구하기  RAND()*100


 참고로 MS-SQL에 나와 있는 도움말은 보기 쉽고 잘 되어 있는거 같다... 한글화도 많은 부분 적용되어 있어 자주 사용되는 쿼리문의 경우 다른 참고 자료 없이 사용이 가능하다.

+ Recent posts