DB를 잘 안써서 모르고 있었는데
이렇게 좋은 기능이 있었다.

어떤 조건에 해당하는 record중 앞쪽에서 지정한 수만큼 record를 가져올 수 있다.


  Microsoft SQL Server   SELECT TOP 10 column FROM table
  PostgreSQL and MySQL   SELECT column FROM table LIMIT 10
  Oracle   SELECT column FROM table WHERE ROWNUM <= 10
  Sybase   SET rowcount 10 SELECT column FROM table
  Firebird   SELECT FIRST 10 column FROM table



DB마다 좀 문법은 틀리기는 해도 이런 기능들이 다 있기는 하네
이런 기능이 예전부터 있었던건가?

하기야 나같은 경우는 access를 주로 써서 access는 이런 기느이 없네
Posted by 떡잎

아파치, PHP, MySQL를 설치해봤다.
첨에는 아무것도 모르고 그냥 인터넷에서 뒤져서 깔아봤다.
제대로 알기 쉽게 씌여있는 곳을 못찾았다.
내가 검색 능력이 좀 부족한가보다.

이것저것 파일을 고쳐야된다고 씌여있었지만
막상 깔아보니까 아파치와 PHP를 얹히고 PHP에 MySQL은 연동하는 방법은
프로그램 설치만으로 끝났다.

설치한 버전
 Apache Ver 2.2.8
 PHP Ver 5.2.5
 mySql Ver 5.0.45
 
나중에 혹시 다시 깔찌 모르니까 간단히 정리해 놓는다.
버젼이 틀려지면 설치방법이 또 틀려질찌 모르겠지만
더 편해지는 것은 있어도 불편해 지는 것은 없겠지...

설치하는 순서는
 아파치 MySQL 그리고 PHP가 좋은 것같다.
 난 아파치 PHP 그리고 MySQL을 설치했지만...

  아파치 http 서버(Ver 2.2.8) 설치방법
  MySQL 5.0 Community Server(Ver 5.0.45) 설치방법
  PHP5 (Ver 5.2.5) 설치방법

위에 있는 방법대로만 하면 파일을 직접 건드리지 않고 모든 것을 다 설치할 수 있다.
그대신 웹서버에서 index.php같은것이 자동으로 표시는 안된다.

Posted by 띠리

이 MySQL 서버 설치방법은 실운용을 위한 셋업이 아니고 웹서버를 한번 공부해보고 싶은 초짜를 위한 설치방법이다. 실운용을 위한 셋업을 알고 사람은 다른 사이트를 보는 것을 좋을 것같다.

설치환경(Windows XP Pro)

사용자 삽입 이미지

MySQL Server를 MySQL 홈페이지에서  다운로드 받는다.

mysql-5.0.45-win32을 실행하여 셋업을 시작한다.

사용자 삽입 이미지

넥스트 버튼 클릭

사용자 삽입 이미지

Custom을 선택하여 넥스트 버튼 클릭
설치 패스를 바꾸려면 Custom을 선택해야됨

사용자 삽입 이미지

프로그램을 어떤 것을 설치하는지는 잘 몰라서 그냥 건드리지 않고
설치되는 패스만 변경하였다. 체인지 버튼을 누르면 밑의 화면이 표시된다.

사용자 삽입 이미지

설치할 패스를 선택하거나 폴더명에 입력하고 오케이 버튼을 클릭하고 넥스트 버튼을 클릭한다.

사용자 삽입 이미지

셋업타입과 설치 패스가 표시된다.
특별히 문제가 없으면 인스톨 버튼을 클릭하여 인스톨을 시작한다.

사용자 삽입 이미지

파일을 카피하며 인스톨이 시작된다.

사용자 삽입 이미지

넥스트 버튼을 클릭해준다.

사용자 삽입 이미지

넥스트 버튼을 클릭해준다.

사용자 삽입 이미지

MySQL의 환경을 설정하기 위해서는 체크박스를 체크한 상태로 Finish버튼을 클릭한다.
Configure the MySQL Server now를 체크한 상태로 끝내면
아래와 같은 Configuration 마법사 화면이 표시된다.

사용자 삽입 이미지

넥스트 버튼을 클릭한다.

사용자 삽입 이미지

Detailed Configurarion을 선택하고 넥스트 버튼을 클릭한다.

사용자 삽입 이미지

서버 타입 설정
 설정은 메모리와 디스크 그리고 CPU사용량에 영향을 미친다.
그냥 테스트와 개발 만을 목적으로 하면 Developer Machine을 선택하고 넥스트 버튼을 클릭한다.
Developer Machine이 가장 컴퓨터 자원을 들 잡아먹는다.


사용자 삽입 이미지

데이터베이스 용도 설정
그냥 테스트와 개발 만을 목적으로 하면 Multifunctional Database를 선택하고
넥스트 버튼을 클릭한다.

사용자 삽입 이미지

데이터베이서 파일 위치 설정
데이터베이스 파일 저장되는 패스를 설정할 수 있다.
원하는 패스를 설정하고 넥스트 버튼을 클릭한다.

사용자 삽입 이미지

동시접속자 관련 설정
그냥 테스트와 개발 만을 목적으로 하면 Decision Support(DSS)/OLAP을 선택하고
넥스트 버튼을 클릭한다.

사용자 삽입 이미지

네트워크 옵션 설정
그냥 아무것도 설정하지않고 넥스트 버튼을 클릭했다.
Enable TCP/IP Networking에 체크를 하면 TCP/IP를 통해서 접속할 수 있으며
접속 포트 번호를 설정한다.


사용자 삽입 이미지

기본 문자 설정
Best Support For Mulilingualism을 선택하고 넥스트 버튼을 클릭한다.

사용자 삽입 이미지

윈도우 옵션 설정
install As Windows Service를 체크하고 넥스트 버튼을 클릭한다.
install As Windows Service를 체크하면 MySQL Server를 윈도우 서비스로 등록하고
Launch The MySQL Server automatically를 체크하면 윈도우가 기동할 때
MySQL Server도 서비스로서 자동으로 시작된다.

사용자 삽입 이미지

보안 옵션 설정
root의 패스워드를 설정하고 넥스트 버튼을 클릭한다.
MySQL Server에 로그인 하기 위한 패스워드이기 때문에 잊어버려서는 안된다.

사용자 삽입 이미지

Execute버튼을 클릭하면 설정한 내용을 적용하기 시작한다.

사용자 삽입 이미지

설정한 내용 적용중

사용자 삽입 이미지

설정이 끝나면 위 화면이 나타나고 Finish버튼을 클릭하면
MySQL Server의 설치와 설정이 종료된다.

사용자 삽입 이미지

MySQL Server가 정상적으로 설치되면 위의 이미지처럼 MySQL이  모든 프로그램에 표시된다.
MySQL Command Line Client를 실행하면 아래처럼 표시된다.

사용자 삽입 이미지

MySQL 설정에서 root의 패스워드를 입력하면 MySQL에 로그인된다.

사용자 삽입 이미지

이렇게 MySQL Server를 설치한다.
설치 자체는 그렇게 어렵지 않다.
Posted by 띠리
MySQL 필드 타입

tinyint 부호있는 정수 -128 ~ 127
부호없는 정수 0 ~ 255
1 byte
smallint 부호있는 정수 -32,768 ~ 32,767
부호없는 정수 0 ~ 65,536
2 byte
mediumint 부호있는 정수 -8,388,608 ~ 8,388,607
부호없는 정수 0 ~ 16,777,215
3 byte
bigint 부호있는 정수
-9223,372,036,854,775,808 ~ -9223,372,036,854,775,807
부호없는 정수
0 ~ 18,446,744,073,709,551,615
8 byte
float 부동 소수점
-3.402823488E+38 ~ 3.402823488E+38
-
double 부동 소수점
-1.79769313486231517E+308 ~ 1.79769313486231517E+308
-
date 날짜 1000-01-01 ~ 9999-12-31 3 byte
datetime 날짜와 시간
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
8 byte
timesstamp 1970-01-01 00:00:00 ~ 2037년까지 4 byte
time 시간 -839:59:59 ~ 838:59:59 -
year 연도 1901 ~ 2155 -
char 고정 길이 문자열을 표현하는 유형 1 ~ 255 byte
vchar 가변 길이 문자열을 표현하는 유형 1 ~ 255 byte
tinyblob 255개 문자를 저장 -
blob binary large object -
tinytext
blob text
65,535개의 문자를 저장 -
mediumblob
mediumtext
16,777,215개의 문자를 저장 -
longblob
longtext
4,294,967,295 4 giga
Posted by 띠리
MySQL의 테이블 데이터를 파일로 출력하기

mysql> select * into outfile '출력할 파일명'
    -> fields terminated by ','        <- 필드를 구분할 기호
    -> from 테이블명;
Query OK, 26 rows affected (0.06 sec)



mysql> select * into outfile 'test_tbl.txt'
    -> fields terminated by ','
    -> from TEST_TBL;
Query OK, 26 rows affected (0.06 sec)






Posted by 띠리

MySQL에서 테이블을 만들거나 데이터를 입력할때
MySQL Command Line Client에서 일일이 입력해도 되지만 좀 번거롭다.
MySQL Command Line Client에서 붙여넣기를 지원하기는 하지만
붙여넣기만으로는 좀 부족하다고 생각하는 사람들은 source 명령어를 이용하면 된다.

◆ source 명령어
외부 파일의 SQL문을 실행시킨다.

mysql> source <파일명>;

인터넷에서 찾아보니까 위에 같이만 씌여있어서 좀 해맸다.
저런식으로 씌여있으면 파일명을 쓸 때 일반적으로 아래와 같이 쓴다.

mysql> source d:\mysql\test.sql;

이렇게 쓰면 에러가 뜬다.
source명령어의 파일명을 쓸때는 반드시 "\"대신에 "/"를 써주어야된다.

mysql> source d:/mysql/test.sql;
Database changed
Query OK, 0 rows affected, 1 warning (0.06 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.02 sec)
mysql> select * from tlog;
+-------+---------------------+----------+-------------------+
| LogID | LogTime             | fSec     | fLog              |
+-------+---------------------+----------+-------------------+
|     1 | 2005-05-15 13:28:48 | test     | I am testing now. |
|     2 | 2007-05-17 11:22:43 | practice | I am a boy.       |
|     3 | 2007-05-17 18:28:48 | test     | I am a bad boy.   |
+-------+---------------------+----------+-------------------+
3 rows in set (0.00 sec)

test.sql의 간단 예제

use hong;
create table IF NOT EXISTS tLog ( LogID int8,
LogTime TIMESTAMP,
fSec char(16),
fLog char(255)
) type = InnoDB;
INSERT INTO tLog (LogID, LogTime, fSec, fLog)
values(1, 20050515132848, 'test', 'I am testing now.');
INSERT INTO tLog (LogID, LogTime, fSec, fLog)
values(2, 20070517112243, 'practice', 'I am a boy.');
INSERT INTO tLog (LogID, LogTime, fSec, fLog)
values(3, 20070517182848, 'test', 'I am a bad boy.');

데이터베이스를 먼저 선택하고 source로 파일을 실행하던지
아니면 파일안에서 데이터베이스를 선택해도 된다.

파일에서 SQL문을 실행할때는 2바이트 문자는 지원을 안하나보다.
무슨 설정을 해야되나? -.-;;


 

Posted by 띠리
데이터베이스의 날짜를 입력할때 간간히 헤깔리는 경우가 있다.
"1998-12-31"으로 입력해야되는지
"1999/12/31"으로 입력해야되는지
"19991231"으로 입력해야되는지가...

MySQL의 date, time, date_time, time_stamp의 입력형식

우선 MySQL에서 아무 데이터베이스나 선택해서 밑에 테이블은 만든다.

CREATE TABLE InputTest (date date, time time, date_time datetime, time_stamp timestamp);

아래와 같은 형식으로 데이터를 입력하면 문제없이 데이터가 입력된다.

INSERT INTO InputTest VALUES
("1998-12-31", "23:59:59", "1998-12-31 23:59:59",19981231235959);

date_time이나 time_stamp는 두가지 입력방식이있다.
 ① yyyy-mm-dd hh:mm:ss
 ② yyyymmddhhmmss

INSERT INTO InputTest VALUES
("1998-12-31", "23:59:59", 19981231235959,"1998-12-31 23:59:59");

밑의 예제와 같이 입력을하면 에러가 뜬다.

INSERT INTO InputTest VALUES
("1999/12/31", "13:59:59", "1998/11/31 21:59:59",19991231235959);

ERROR 1136 (21S01): Column count doesn't match value count at row 1

문제없이 입력된 데이터를 보면 아래와 같다.

mysql> select * from inputtest;
+------------+----------+---------------------+---------------------+
| date       | time     | date_time           | time_stamp          |
+------------+----------+---------------------+---------------------+
| 1998-12-31 | 23:59:59 | 1998-12-31 23:59:59 | 1998-12-31 23:59:59 |
+------------+----------+---------------------+---------------------+
1 row in set (0.00 sec)

만들어진 테이블의 정보를 보면 아래와 같다

mysql> desc inputtest;
+------------+-----------+------+-----+-------------------+-------+
| Field      | Type      | Null | Key | Default           | Extra |
+------------+-----------+------+-----+-------------------+-------+
| date       | date      | YES  |     | NULL              |       |
| time       | time      | YES  |     | NULL              |       |
| date_time  | datetime  | YES  |     | NULL              |       |
| time_stamp | timestamp | NO   |     | CURRENT_TIMESTAMP |       |
+------------+-----------+------+-----+-------------------+-------+

위의 표를 보면 timestamp는 디폴트 값이 있다.
timestamp의 값은 입력을 하지 않으면 자동으로 현재 일시를 입력해준다.
(그래서 시간 도장이란 이름이였군)

Posted by 띠리
MySQL에서 테이블 만들때 쓸수있는 필드 형식

TINYINT[(length)] [UNSIGNED] [ZEROFILL]
SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
INT[(length)] [UNSIGNED] [ZEROFILL]
INTEGER[(length)] [UNSIGNED] [ZEROFILL]
BIGINT[(length)] [UNSIGNED] [ZEROFILL]
REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]
CHAR(length) [BINARY | ASCII | UNICODE]
VARCHAR(length) [BINARY]
DATE
TIME
TIMESTAMP
DATETIME
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM(value1,value2,value3,...)
SET(value1,value2,value3,...)
Posted by 띠리
msado15.dll을 이용해서 MFC에서 ADO로 데이테베이스 억세스하기
여기서 데이터베이스는 MySQL을 썼다.
다른 데이터베이스를 쓸때는 접속 문자열을 바꾸어 주면 될 것같다.

예제는 hong 데이터베이스의 animal 테이블의 필드명과
데이터를 직접 실행 창에 출력하는 예제이다.

TRACE함수는 MFC의 함수라는 것을 이번에 처음 알았다. -.-;;


 



#include "stdafx.h"

#include "stdio.h"

#include "io.h"


// ADO DLL 임포트

#import "C:\Program files\Common Files\System\Ado\msado15.dll" no_namespace rename("EOF", "ADOEOF")


int main()

{

    HRESULT    hr;


    // COM 라이브러리 초기화

    CoInitialize(NULL);


    try {


        _ConnectionPtr    pConn;

        _RecordsetPtr    pRs;


        hr = pConn.CreateInstance(__uuidof(Connection));

        hr = pRs.CreateInstance(__uuidof(Recordset));       


        pConn->CursorLocation = adUseClient;


        // MySQL ODBC 접속 문자열

        _bstr_t strConn("DRIVER={MySQL ODBC 3.51 Driver};SERVER = localhost;DATABASE = hong;UID = hong; PWD = hong;");


        // 데이터베이스 접속

        hr = pConn->Open(strConn, "", "", adConnectUnspecified);


        // 레코드셋 설정

        hr = pRs->Open("select * from animal", pConn.GetInterfacePtr(), adOpenForwardOnly, adLockReadOnly, adCmdText);



        _variant_t    vtColumn;

        _variant_t    vtNull;


        vtNull.ChangeType(VT_NULL);


        TCHAR    strDisp[MAX_PATH+1];

        short    i;

        long    nRow = pRs->Fields->Count;    // 레코드수 취득


        // 필드명 표시

        for (i = 0; i < nRow; i++)

        {

            // 필드명 취득

            vtColumn = pRs->Fields->GetItem(i)->Name;


            vtColumn.ChangeType(VT_BSTR);

            lstrcpyn(strDisp, (_bstr_t)vtColumn, MAX_PATH);


            if (i == nRow - 1) {

                TRACE("%s\n", strDisp);

            } else {

                TRACE("%s,", strDisp);

            }

        }


        pRs->MoveFirst();


        // 필드값 표시

        if(!pRs->ADOEOF)

        {

            while(!pRs->ADOEOF)

            {

                for (i = 0; i < nRow; i++)

                {

                    vtColumn = pRs->GetCollect(i);


                    // 데이터가 NULL이면 ""을 대입

                    if (vtColumn == vtNull) {

                        vtColumn = _variant_t("");

                    } else {

                        vtColumn.ChangeType(VT_BSTR);

                    }

                    lstrcpyn( strDisp, (_bstr_t)vtColumn, MAX_PATH );


                    if (i == nRow - 1) {

                        TRACE("%s\n", (LPCSTR)strDisp);

                    } else {

                        TRACE("%s,", (LPCSTR)strDisp);

                    }

                }


                pRs->MoveNext();

            }

        }


        hr = pRs->Close();



    } catch(_com_error &e) {

        _bstr_t bstrSource(e.Source());

        _bstr_t bstrDescription(e.Description());

        printf("Error:%s\n", (LPCSTR) bstrDescription);

    }

}





Posted by 띠리


show databases
데이터베이스의 리스트 표시

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hong               |
| memo               |
| mysql              |
| test               |
+--------------------+
5 rows in set (0.00 sec)

use [사용할 데이터베이스 명]
데이터베이스 선택

mysql> use memo
Database changed

show tables
선택한 데이터베이스의 테이블 리스트

mysql> show tables;
+----------------+
| Tables_in_memo |
+----------------+
| tmemo          |
+----------------+
1 row in set (0.00 sec)

테이블의 속성 표시
     - desc [테이블명]
     - show fields from [테이블명]
     - show columns from [테이블명]

mysql> desc tmemo;
+--------+------------+------+-----+---------+-------+
| Field  | Type       | Null | Key | Default | Extra |
+--------+------------+------+-----+---------+-------+
| memoID | bigint(20) | YES  |     | NULL    |       |
| fuser  | char(20)   | YES  |     | NULL    |       |
| fmemo  | char(255)  | YES  |     | NULL    |       |
+--------+------------+------+-----+---------+-------+
3 rows in set (0.05 sec)

mysql> show fields from tmemo;
+--------+------------+------+-----+---------+-------+
| Field  | Type       | Null | Key | Default | Extra |
+--------+------------+------+-----+---------+-------+
| memoID | bigint(20) | YES  |     | NULL    |       |
| fuser  | char(20)   | YES  |     | NULL    |       |
| fmemo  | char(255)  | YES  |     | NULL    |       |
+--------+------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> show columns from tmemo;
+--------+------------+------+-----+---------+-------+
| Field  | Type       | Null | Key | Default | Extra |
+--------+------------+------+-----+---------+-------+
| memoID | bigint(20) | YES  |     | NULL    |       |
| fuser  | char(20)   | YES  |     | NULL    |       |
| fmemo  | char(255)  | YES  |     | NULL    |       |
+--------+------------+------+-----+---------+-------+
3 rows in set (0.00 sec)









 

Posted by 띠리
BLOG main image
프로그래밍 공부하면서 써가는 개인 노트 (따라서 여기에 씌여있는 소스의 신빙성을 보장 못함 -.-;;) 이 블로그 보면서 틀린 점이 있으면 꼬옥 알려주세요. by 띠리

공지사항

카테고리

분류 전체보기 (323)
Win32 SDK 초보 (27)
통신관련 (11)
MFC TIP (20)
C/C++ TIP (10)
개발기타 (10)
링크 (2)
견물생심 (24)
이것저것 (8)
용어메모 (3)
데이터베이스 (32)
비주얼 베이직 (10)
하드웨어 (3)
C# (42)
Xcode (3)
델파이 (82)
홈페이지 (5)
MindStorm (0)
낙서 (5)
스크래치 (0)
기타 (6)
아두이노 (1)
라즈베리파이 (2)
안드로이드 (6)
파이썬 (0)
WEB (2)
Total : 987,324
Today : 402 Yesterday : 409