'개발지식창고/DataBase'에 해당되는 글 17건

  1. 2010.08.31 MFC 환경에서 MySQL 연동하는 방법
  2. 2010.08.31 MySQL : Data Type (1 of 2)
  3. 2010.08.31 MFC MYSQL 연동
  4. 2010.08.31 [MySQL] 기본명령어
  5. 2010.08.31 [MySQL] 데이타베이스명령어
  6. 2010.08.31 [MySQL]MySQL 테이블수정
  7. 2010.08.31 [MySQL] MySQL 기본 명령어 정리


mysql-installer-web-community-5.6.22.0.msi

MySQL용 ODBC 드라이버를 설치하지 않고 직접 라이브러리를 이용하는 방법으로 MS Visual C++ 6.0 환경에서 MySQL을 접근하는 방법을 살펴보겠다. 이 방법은 MySQL Database가 어디 있든 상관없이 MySQL서버에 접근 권한 설정만 되어 있으면 상관없겠다.

여기서 제시한 방법은 내가 사용한 방법이지 결코 답은 아니다. 더 좋은 방법이 있다면 함께 공유했으면 한다.
또 환경이 Visual C++ 6.0 이라고 해서 .NET환경에 적용하지 못한다는 법은 없다. 다 참고가 되는 내용이라고 생각한다.

여기서는 Window에 Apache, PHP, MySQL을 자동적으로 설치해주는 WAMP를 설치하고 필요한 개발관련 C Include 파일과 Lib, DLL File를 설정한 다음, 간단한 예제로 설명을 마무리 하겠다.

1. Window 환경에서 APM(Apache, PHP, MySQL) 설치하기


Window환경에 APM을 설치하는 방법은 여러가지가 있다. 그중 가장 쉬운 방법은 이미 나왔는 APM설치관련 패키지를 이용하는 것이 있다. 나는 WAMP라는 훌륭한 APM통합환경을 구축해주는 프로그램으로 쉽게 설치할 수 있었다. 이에 대해서는 아래 링크를 참고하길 바란다.

http://blog.jidolstar.com/77

만약 외부에 MySQL이 있다면 원격에서 접근이 가능한지 확인한 후(mysql DB에 user테이블 host필드가 %로 설정하는 것 같이 외부 접근권한이 설정되어 있어야 한다.) 사용하면 되겠다.

2. C언어 개발관련 Include 파일 및 Lib파일 설치하기


C언어 개발관련 파일을 설치하기 위해 먼저 http://dev.mysql.com/ 에 접속해서 왼쪽메뉴에 Downloads > MySQL Community Server > 5.1(또는 6.0이상) 으로 들어간다. 여기서 Windows downloads에서 Window Essentials(x86)을 직접 Download하던가 Pick a mirror에 들어가서 다운로드 받으면 된다.

다운로드를 받아 실행한다. 다음으로 넘어가면 기본 Typical이 설정되어 있을텐데 Custom으로 바꾼뒤 다음으로 넘어가면 아래와 같은 화면이 나온다.

사용자 삽입 이미지


여기서 C Include Files/Lib Files 만 제외하고 전부 닫아준 다음, 설치를 하면 C:\Program Files\MySQL\MySQL Server 5.1 에 include 폴더와 lib 폴더가 생성된다. include 폴더에는 C언어나 C++에서 사용할 수 있는 MySQL 관련 Header 파일들이 있다. 그리고 lib\opt 폴더 안에는 우리가 사용할 libmysql.lib을 포함한 Lib파일들이 존재하는 것을 확인할 수 있다.

MS Visual C++ 을 실행하고 Tools > Options를 선택하면 아래와 같은 창이 뜬다. Directories 탭을 선택하고 Show directorries for: Include files를 선택한 다음 아래와 같이 Mysql관련 Header 파일이 있는 폴더의 경로를 입력한다. 이런 설정이 필요한 것은 #include <mysql.h> 처럼 <>로 사용할 수 있게 설정하기 위한 것이다. 만약 이렇게 하지 않으면 필요할 때마다 include에 있는 header파일을 전부 복사해서 자신의 프로젝트 폴더에 복사해서 #include "mysql.h" 처럼 사용해야 할 것이다.
사용자 삽입 이미지

그리고 Show directories for:를 Library files를 선택후 Lib가 존재하는 폴더의 경로를 입력하도록 한다.
이 작업을 하지 않으면  프로젝트를 새로 생성해서 작업할때 마다 필요한 lib를 복사해서 사용해야 하므로 아주 번거롭다. Lib파일은 DLL를 로드하고 링크하는 역할을 담당하게 된다.

사용자 삽입 이미지



3. libmysql.dll을 system32폴더에 복사하기


Visual C에서 MySQL을 사용하기 위해 libmysql.dll을 C:\windows\system32 폴더에 있어야 한다.
지금까지 설정만으로는 그렇게 되어 있지 않음을 알 수 있다. DLL 파일은 함수의 집합체라고 할 수 있다. Lib에 의해 로드가 되며 C언어에서는 사용되는 함수의 선언 Header파일로 접근이 가능하겠다.

MySQL의 함수 집합체인 DLL은 libmysql.dll은 앞서 APM을 설치했으므로 C:\wamp\php 폴더에 있다. libmysql.dll을 복사해서 C:\windows\system32 에 복사하면 되겠다.
만약 APM을 설치 안했다면 http://dev.mysql.com 에 접속해서 downloads>connector > Connector/PHP 로 들어가 mysql extention에서 for MySQL Server에 들어가 >>No thanks, just me to the download!를 선택해 다운로드 받아 압축을 풀면 libmysql.dll을 받을 수 있을 것이다.

만약 이 작업을 안한 상태에서 프로젝트 생성후 제작한 MySQL관련 프로그램 실행하면 libmysql.lib이 libmysql.dll을 로드하지 못해서 실행할 수 없다는 에러가 나올 것이다. 이 말은 자신의 프로그램의 결과물인 .exe파일 뿐 아니라 dll도 함께 배포해야한다는 것을 의미하기도 한다.


4. 간단한 예제


이 예제를 실행하기 전에 반드시 MySQL 계정에 자신의 계정 및 접속권한을 확인해야한다.
생각보다 어렵지 않게 실행할 수 있을 것이며

#define SOCKET int 는 맨 위해 #include <mysql.h>는 반드시 다른 include 포다 아래쪽에 있어야 에러를 발생하지 않는다.

#pragma comment()문은 lib를 프로젝트 셋팅할때마다 Project > Setting 에서 link에 libmysql.lib와 ws2_32.lib를 modules에 등록하는 번거로움을 덜기 위해 사용한다.

C코드 예제 (Language : c)
#define SOCKET int

#include <string.h>
#include <stdio.h>
#include <mysql.h>

#pragma comment(lib, "libmysql.lib")
#pragma comment(lib, "ws2_32.lib")   

#define DB_HOST "호스트 IP, 도메인 또는 localhost"
#define DB_USER "접속 ID"
#define DB_PASS "접속 암호"
#define DB_NAME "DB명"

#define SQL_CREATE_TABLE "CREATE TABLE `mysql_api_test` (\
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,\
    `num` INT NULL ,\
    `string` VARCHAR( 20 ) NULL \
    ) TYPE = MYISAM ;" //"
#define SQL_INSERT_RECORD "INSERT INTO `mysql_api_test` ( `id` , `num` , `string` ) \
    VALUES (\
    NULL , '%d', '%s'\
    );" //"
#define SQL_SELECT_RECORD "SELECT * FROM `mysql_api_test`"
#define SQL_DROP_TABLE "DROP TABLE `mysql_api_test`"

int main()
{
    MYSQL *connection=NULL, conn;
    MYSQL_RES *sql_result;
    MYSQL_ROW sql_row;
    int query_stat;
    int i;

    char query[255];

    mysql_init(&conn);

    // DB 연결
    connection = mysql_real_connect(&conn, DB_HOST,
        DB_USER, DB_PASS,DB_NAME, 3306,(char *)NULL, 0);
    if(connection==NULL)
    {
        fprintf(stderr, "Mysql connection error : %s", mysql_error(&conn));
        return 1;
    }

    // 테이블 생성
    query_stat=mysql_query(connection,SQL_CREATE_TABLE);
    if (query_stat != 0)
    {
        fprintf(stderr, "Mysql query error : %s", mysql_error(&conn));
        return 1;
    }

    // 레코드 삽입
    for(i=0;i<5;i++)
    {
        sprintf(query,SQL_INSERT_RECORD,100+i,"안녕하세요 지돌스타예요~");
        query_stat = mysql_query(connection, query);
        if (query_stat != 0)
        {
            fprintf(stderr, "Mysql query error : %s", mysql_error(&conn));
            return 1;
        }
    }

    // 셀렉트
    query_stat=mysql_query(connection,SQL_SELECT_RECORD);
    if (query_stat != 0)
    {
        fprintf(stderr, "Mysql query error : %s", mysql_error(&conn));
        return 1;
    }

    // 결과 출력
    sql_result=mysql_store_result(connection);
    while((sql_row=mysql_fetch_row(sql_result))!=NULL)
    {
        printf("%2s %2s %s\n",sql_row[0],sql_row[1],sql_row[2]);
    }
    mysql_free_result(sql_result);

    // 테이블 삭제
    query_stat=mysql_query(connection,SQL_DROP_TABLE);
    if (query_stat != 0)
    {
        fprintf(stderr, "Mysql query error : %s", mysql_error(&conn));
        return 1;
    }

    // DB 연결 닫기
    mysql_close(connection);
    return 0;
}



참고사이트

MySQL 공식 Development 사이트 : http://dev.mysql.com
MySQL++ : http://tangentsoft.net/mysql++/
MySQL API 사용하기 : http://deadwi.jaram.org/wiki/wikka.php?wakka=KnowingCppMySqlAPI
[그리즐리의 ATL/MFC 팁]MySQL 시작하기 : http://blog.naver.com/hello20/150021875380

글쓴이 : 지돌스타(http://blog.jidolstar.com/250)

'개발지식창고 > DataBase' 카테고리의 다른 글

[SQLITE] SQLITE 관련 사이트  (0) 2013.06.28
[SQLITE] 자료형  (0) 2013.06.28
MySQL : Data Type (1 of 2)  (0) 2010.08.31
MFC MYSQL 연동  (0) 2010.08.31
[MySQL] 기본명령어  (0) 2010.08.31
Posted by 모과이IT
,
MySQL 데이타 타입

MySQL의 데이타 타입은 수치, 문자열, 날짜와 시간, 공간 데이터 타입으로 분류된다.
우선 종류를 살펴 보자

수치 데이터 타입
  • TINYINT
  • SMALLINT
  • MEDIUMINT
  • INT         - 정수
  • BIGINT
  • DECIMAL - 고정 소수
  • FLOAT     - 단정도 부동 소수
  • DOUBLE  - 배정도 부동 소수
  • BIT         - 비트 필드
문자열 데이터 타입
  • CHAR
  • VARCHAR
  • BINARY        - 이진 문자열
  • VARBINARY
  • TINYBLOB
  • BLOB            - Binary Large OBject
  • MEDIUMBLOB
  • LONGBLOB
  • TINYTEXT
  • MEDIMUTEXT
  • LONGTEXT
  • ENUM          - 열거형
  • SET             - 집합형
날짜와 시간 데이터 타입
  • DATE          - 날짜           ( CCYY-MM-DD )
  • TIME           - 시간           ( hh:mm:ss )
  • DATETIME   - 날짜와 시간 ( CCYY-MM-DD hh:mm:ss )
  • TIMESTAMP - 타입스탬프 ( CCYY-MM-DD hh:mm:ss )
  • YEAR           - 연도          ( CCYY 또는 YY )
공간 데이터 타입
  • GEOMETRY     - 공간 값
  • POINT             - 포인트(한 쌍의 X,Y 좌표)
  • LINESTRING    - 커브 (하나 이상의 POPINT 값)
  • PLYGON          - 폴리곤
  • GEOMETRYCOLLECTION  - GEOMETRY 값의 집합
  • MULTILINESTRING   - LINESTRING의 집합
  • MUlTIPOINT             - POINT 값의 집합
  • MULTIPOLYGON       - POLYGON 값의 집합

기본값
  •  AUTO_INCREMENT 속성을 가지는 컬럼을 제외한 모든 컬럼 타입에 대해 기본값이 명시되지 않았다면 숫자 컬럼의 기본 값은 0 이다.
  • TIMESTAMP를 제외한 날짜와 시간 타입에 대해서 기본 값은 "제로" 이다 (예, 0000-00-00 ) 
  • TIMESTAMP의 기본값은 컬럼의 현재 날짜와 시간이다.
  • ENUM 이외의 다른 문자열 타입에서 기본 값은 비어 있다. 
  • ENUM 에 기본 값은 첫번째 열거 요소이다.

어떤 칼럼들이 DEFAULT 절을 가지는지, 그리고 칼럼이 어떤 기본 값을 가지는지 살펴보려면 다음 명령을 이용한다.
mysql> SHOW CREATE TABLE [테이블 이름];

수치 데이타의 범위
 타입 부호 있는 값 부호 없는 값 저장 공간 
TINYINT [ (M) ] -128 ~ 127 0 ~ 255 1 바이트 
SMALLINT [ (M) ] -32768 ~ 32767 0 ~ 65535 2 바이트 
MEDIUMINT [ (M) ] -8388608 ~8388607  0 ~ 16777215 (2^24-1) 3 바이트
INT [ (M) ] -2147683648 ~ 2147483647  0 ~ 4294967295 (2^32-1)  4 바이트
BIGINT [ (M) ] -9223372036854775808 ~ 92233720368547758087   0~18446744073709551615 (2^64-1) 8 바이트 
DECIMAL ( [M[,D]] )  -  - M과 D에 따라 다름 
FLOAT [ (M,D ]   -  - 4 바이트 
DOUBLE [ (M,D) ]   -  - 8 바이트 
BIT[ (M) ]    0 ~ 2^M-1  M에 따라 다름

  • 정수  컬럼을 선언 할 때, 선택적인 크기 M을 지정할 수 있다. M은 1에서 255까지 정수 이다. 이것은 컬럼 값을 표시하는 데 사용되는 문자들의 수에만 관련이 있지 저장공간의 바이트 수와는 아무런 관련이 없다.
  • DECIMAL에서 M은 유효자리수, D는 소숫점 자리수를 나타낸다. M은 1부터 65, D는 0부터 30까지 값을 가지고 M보다 클 수 없다. (예를 들어 DECIMAL(5,1) 이라면 값의 범위는 -9999.9 ~ 9999.9 까지 이다.)
  • DECIMAL, DECIMAL, FIXED 은 동의어이다.
  • REAL은 DOUBLE과 동의어이다. (SQL 모드 REAL_AS_DEFAULT가 활성화 되면 REAL은 FLOAT와 동의어가 됨)
  • DOUBLE, FLOAT에서 M은 유효 자릿수 (1~255), D는 십진 자릿수 (0~30) 이다. DECIMAL과 달리 M,D의 지정은 선택사항이다.
문자열 데이타의 범위
 타입 최대 크기 필요한 저장공간
VARBINARY [ (M)  ] M 바이트 L+1 또는 2 바이트 
CHAR [ (M) ] M 문자 M x w 바이트
VARCHAR (M) M 문자 L+1 또는 2 바이트 
TINYBLOB 2^8-1 바이트  L+1 바이트 
BLOB 2^16-1 바이트  L+2 바이트 
MEDIUMBLOB  2^24-1 바이트  L+3 바이트
LONGBLOB 2^32-1 바이트  L+4 바이트 
TINYTEXT 2^8-1 문자 L+1 바이트 
TEXT 2^16-1 문자  L+2 바이트 
MEDIUMTEXT 2^24-1 문자 L+3 바이트 
LONGTEXT 2^32-1 문자  L+4 바이트 
ENUM('value1','value2', ...) 65,535개의 요소  1또는 2 바이트
SET('value1','value2', ...) 64개의 요소  1,2,3,4, 또는 8 바이트 
  • M은 컬럼 값의 최대 길이, L은 바이트 단위로 주어진 값의 실제 길이를 나타낸다.
  • BINARY(20)은 20바이트를 가지며, CHAR(20)은 20개의 문자를 가진다.

Reference
  • MySQL의 사용, 관리, 프로그래밍을 위한 완벽 가이드, Paul Dubois 저 / 김형훈 역, 지&선

'개발지식창고 > DataBase' 카테고리의 다른 글

[SQLITE] 자료형  (0) 2013.06.28
MFC 환경에서 MySQL 연동하는 방법  (0) 2010.08.31
MFC MYSQL 연동  (0) 2010.08.31
[MySQL] 기본명령어  (0) 2010.08.31
[MySQL] 데이타베이스명령어  (0) 2010.08.31
Posted by 모과이IT
,

가장 먼저 Mysql을 설치 하여야 한다.
설치법은 찾기가 쉽고 금방 설치할 수 있다. 대신 꼭 필요한 부분만 언급 하겠다.


꼭 참조 ~~
이제 안의 setup.exe을 실행시키면 마법사가 질문을 이것저것 던지는데 다음의 것만 신경쓰면 된다. (어차피 우리가 필요한것은라이브러리 파일일 뿐이다.) custom설치를 선택하고 다음처럼 라이브러리 파일만 설치하는 것으로 한다.

사용자 삽입 이미지

Developer component 가 바로 라이브러리 파일을 설치하는 것이다. 그냥 typical설치하면 이 라이브러리가 "절대!" 깔리지 않으니 반드시 커스텀 설치로 하길 바란다.

여기 그림에서 처럼 서버를 설치 하지 않은 것이 아니라 난 다 설치하여 사용하였다.

설치가 끝났으면 지금 아주 중요한 셋팅이 있다. 자료도 많고 했지만 .NET2005에서 하는 거
라 많은 실수를 했다.

1. 설치가 끝난 후 MySQL이 깔려 있는  폴더에 가면 다음 그림을 볼 수 있다.

사용자 삽입 이미지

2. 라이브러리와 인클루드 폴더를 도구 -> 옵션-> 프로젝트 및 솔루션 에서 다음 그림과 같이 디렉토리 설정를 걸어 두어야 한다.
1) 라이브러리 디렉토리 설정

사용자 삽입 이미지


2) include폴더 디렉토리 설정을 한다.
사용자 삽입 이미지

3. 이제 모든 설정은 끝이 나고 다음과 같이 프로젝트 폴더에 그림과 같이 libmySQL.dll과 libmysql 라이브러리 파일을 폴더로 복사한다. 이 파일은 쉽게 MySQL 설치 폴더에 가면 찾을 수 있다.

사용자 삽입 이미지


이렇게 설정은 끝이 난다.

다음은 실질적인 코딩을 하는 것이다.
먼저 stdafx.h에 다음과 같은 구문을 추가한다.
사용자 삽입 이미지
이렇게 추가 시킨 후

Doc.h에 다음과 같은 코드를 추가하였다. "127.0.0.1"을 호스트로 바꾸면 자기 컴퓨터에 서버의 호스트 주소가 되는 것이다.
사용자 삽입 이미지

이렇게 헤더 파일을 설정 후 Doc.cpp파일에 실질적인 코딩을 하였다.
사용자 삽입 이미지
이렇게 하여 DB와 연동이 되는 것을 확인할 수 있었다.

'개발지식창고 > DataBase' 카테고리의 다른 글

MFC 환경에서 MySQL 연동하는 방법  (0) 2010.08.31
MySQL : Data Type (1 of 2)  (0) 2010.08.31
[MySQL] 기본명령어  (0) 2010.08.31
[MySQL] 데이타베이스명령어  (0) 2010.08.31
[MySQL]MySQL 테이블수정  (0) 2010.08.31
Posted by 모과이IT
,
# MySQL 접속
C:\> mysql -h호스트 -u계정 -p비밀번호 데이터베이스명

예) mysql -hlocalhost -uroot -pdbpass mysql
* -h는 생략하셔두 됩니다.

# 데이터베이스 생성
mysql> create database 데이터베이스명;

# 데이터베이스 보기
mysql> show databases;

# 데이터베이스 변경 및 접근
mysql> use 데이터베이스명;

# 데이터베이스 삭제
mysql> drop database 데이터베이스명;

* mysql을 접속 안한 상태
C:\> mysqladmin -u계정 -p비밀번호 drop 데이터베이스명

# 테이블 생성
mysql> create table 테이블명 (필드명 필드속성(필드길이) 기타옵션);

예)
create table test (
num int(11) NOT NULL auto_increment,
member varchar(50),
system int(2) DEFAULT '0',
tdate datetime,
PRIMARY KEY (num) );

# 테이블 보기
mysql> show tables;

# 테이블 구조 보기
mysql> desc 테이블명;

# 테이블 구조 추가
mysql> alter table 테이블명 add 필드명 필드속성(필드크기) 옵션;

예) alter table test add subject varchar(50) NOT NULL DEFAULT 'No';

# 테이블 구조 수정
mysql> alter table 테이블명 change 필드명 변경할필드명 필드속성(필드크기) 옵션;

예) alter table test change subject content text;

# 테이블 구조 삭제
mysql> alter table 테이블명 drop 필드명;

# 테이블 복사
mysql> create table 사본테이블명 as select * from 원본테이블명;

# 테이블 삭제
mysql> drop table 테이블명;

# 데이터베이스 백업
C:\> mysqldump -u 유저아이디 -p DB명 > 저장할파일명

[테이블 백업]
C:\> mysqldump -u 유저아이디 -p DB명 테이블명 > 저장할파일명

# 데이터베이스 복원
C:\> mysql -u 유저아이디 -p DB명 < 백업파일명

'개발지식창고 > DataBase' 카테고리의 다른 글

MySQL : Data Type (1 of 2)  (0) 2010.08.31
MFC MYSQL 연동  (0) 2010.08.31
[MySQL] 데이타베이스명령어  (0) 2010.08.31
[MySQL]MySQL 테이블수정  (0) 2010.08.31
[MySQL] MySQL 기본 명령어 정리  (0) 2010.08.31
Posted by 모과이IT
,
############## mysql 데이타 베이스 명령어 ##############
작성자: w0rm9 (허접해도 이해해주기~)

1. mysql에 초기 접속하기
먼저, root 로 /usr/local/mysql/bin/mysql 에 접속한다.

# mysql -u root mysql
// 초기엔 mysql관리자 root(서버의 root가 아님!)의 패스워드가 등록되어 있지 않기 때문에 패스워드 없이 접속 할 수 있다.



2. mysql관리자 root 패스워드 설정
mysql을 설치하고 나면 mysql이라는 데이터베이스가 기본적으로 생성되어 있다. (show databases; 로 확인 ;-)
즉, mysql 관리용 데이타베이스라고 생각하면 된다. 즉, mysql관리자인 root도 이 데이터베이스의 user라는 테이블내에
등록되어 있다. root 패스워드 변경은 user라는 테이블에서 변경해주면 된다.

mysql> update user set password = password('w0rm9') where user = 'root';
// root의 패스워드를 w0rm9 으로 설정했다.

그런 다음 exit; 명령어로 빠져나와서 데이터베이스를 재시작해준다.
# mysqladmin -u root reload

다음 접속시 부터는 패스워드를 입력해야 한다.
# mysql -u root -p
Enter password: 패스워드 입력



3. mysql 새로운 사용자 계정 설정법
# mysql -u root -p
Enter password:
....어쩌구 저쩌구.......

mysql> use mysql;
....어쩌구 저쩌구.......
Database changed

// w0rm9이란 데이터베이스를 만들었다.
mysql> create database w0rm9db;

// mysql 데이터베이스의 user 테이블에 새로운 사용자를 생성한다.
mysql> insert into user (host, user, password) values('localhost','w0rm9',password('1234')); 또는
mysql> insert into user values('localhost','w0rm9',password('1234'),'Y','Y','Y',Y''Y','N','N','N','N','N','N','N','N','N');

// user라는 테이블에 생성된 mysql사용자(w0rm9)가 입력되었는지 확인힌다.
mysql> select * from user where user = 'w0rm9';

// db 테이블에 w0rm9사용자가 사용할 데이터베이스 연동시킨다.
mysql> insert into db values('localhost','w0rm9db','w0rm9','y','y','y','y','y','y','y','y','y','y');

// db 테이블에 w0rm9db라는 db가 연동되었는지 확인한다.
mysql> select * from db where db = 'w0rm9db';

// 생성된 데이터베이스를 확인한다.
mysql> show databases;

// 빠져나온다.
mysql> exit

// 새로운 사용자나 데이터베이스 생성 후에는 반드시 reload를 해줘야 적용된다.
# mysqladmin -u root -p reload
Enter password:

-보안을 위한 일반사용자의 권한 설정-
user에서 localhost, user, password만 빼고 나머지는 다 N
db에서 localhost, Db, user 만 빼고 나머지는 다 Y



4. mysql 기존 데이터베이스 삭제
// 데이터베이스를 확인한 후 삭제한다.
mysql> show databases;
mysql> drop database w0rm9db;

// 사용자를 삭제한다.
mysql> delete from user where user='w0rm9';
mysql> delete from db where user='w0rm9';



5. table 관련 명령어
// table 생성하기
mysql> create table table_w0rm9 (
         -> name varchar(12),
         -> contents text
         -> );

mysql> show tables;
     +--------------------+
     | Tables_in_babyhack |
     +--------------------+
     | table_w0rm9        |
     +--------------------+

mysql> desc table_w0rm9;
     +---------+-----------------------+------+-----+---------+----------------+
     |  Field  | Type                  | Null | Key | Default | Extra          |
     +---------+-----------------------+------+-----+---------+----------------+
     name   | varchar(12)           |      |     |         |                |
     |contents | text                  |      |     |         |                |
     +---------+-----------------------+------+-----+---------+----------------+

//table 삭제하기
mysql> drop table table_w0rm9;

//table 이름 바꾸기
mysql> alter table old_w0rm9 rename new_w0rm9;

// 필드 추가하기, varchar(40)이라는 타입의 homepage라는 필드가 추가된다.
mysql> alter table table_w0rm9 add column homepage varchar(40);

// 필드명 변경하기, 생성했던 homepage 필드를 age로 변경한다. 속성까지 변경 가능
mysql> alter table table_w0rm9 change column homepage age varchar(3);

// 필드 삭제하기, 생성했던 homepage 필드가 삭제된다.
mysql> alter table table_w0rm9 drop column homepage;

// 데이터 추가하기, 내용 추가 후 확인
mysql> insert into table_w0rm9(name, contents, homepage) values('w0rm9','hacked by w0rm9', 'http://w0rm9.madnom.com');
mysql> select * from table_w0rm9;

// 데이터 검색하기
mysql> select contents from table_w0rm9;  // contents의 내용만 확인한다.
mysql> select contents, name from table_w0rm9;  // contents, name의 내용만 확인한다.
mysql> select homepage from talbe_w0rm9 where name = 'w0rm9';  // name이 w0rm9의 homepage내용만 출력한다.
mysql> select name from talbe_w0rm9 where name LIKE '%rm%';   // name에 rm이 포함된 name의 내용만 출력한다.

// 데이터 수정하기
mysql> update talbe_w0rm9 set name = 'cracker' where homepage = 'http://w0rm9.madnom.com';
// 홈페이지가 http://w0rm9.madnom.com 인 레코드의 name을 cracker로 입력했다.

// 데이터 삭제하기
mysql> delete from testtable where name = 'w0rm9';
// name가 w0rm9인 레코드를 삭제했다.



6. 그 밖의 명령어들
// 현재 데이터베이스 확인
mysql> show databases;

// mysql이라는 데이터베이스를 작업대상 Db로 정함
mysql> use mysql;

// 현재 액세스한 테이터베이스의 테이블 확인
mysql> show tables;

// 테이블에 존재하는 모든 데이터 검색
mysql> select * from user;
mysql> select * from db;

// 특정 테이블의 필드구조 확인
mysql> show columns from user;
mysql> desc user;



7. mysqladmin 사용법
// 데이터베이스 종료
# mysqladmin -u root -p shutdown

// 데이터베이스 재시작
# mysqladmin -u root -p reload

// 새로운 데이터베이스 생성
# mysqladmin -u root -p create w0rm9

// 기본의 데이터베이스 삭제
# mysqladmin -u root -p drop w0rm9

// root 패스워드 변경
# mysqladmin -u root -p password 1234



8, 백업과 복구
// w0rm9db라는 데이터베이스 백업하기
# mysqldump -u root -p w0rm9db > w0rm9db.bak.sql
Enter password:

// w0rm9db.bak.sql 백업베이터 복구하기
# mysql -u root -p w0rm9db < w0rm9db.bak.sql
Enter password"

위와 같이 데이터베이스를 백업할때는 mysql이라는 데이터베이스도 함께 백업해 둔다.
어떤 데이터베이스가 있었나는 알 수 있기 때문이다.

_eof_

'개발지식창고 > DataBase' 카테고리의 다른 글

MySQL : Data Type (1 of 2)  (0) 2010.08.31
MFC MYSQL 연동  (0) 2010.08.31
[MySQL] 기본명령어  (0) 2010.08.31
[MySQL]MySQL 테이블수정  (0) 2010.08.31
[MySQL] MySQL 기본 명령어 정리  (0) 2010.08.31
Posted by 모과이IT
,
이름 바꾸기
mysql> ALTER TABLE tablename RENAME bbs;


컬럼 속성 수정
mysql> ALTER TABLE tablename MODIFY colname INT NOT NULL AUTO_INCREMENT PRIMARY KEY;

ALTER TABLE tablename MODIFY 컬럼이름 컬럼속성

컬럼 이름 바꾸기
sysql> ALTER TABLE tablename CHANGE colname newcolname INT NOT NULL AUTO_INCREMENT;

CHANGE는 컬럼 속성뿐아니라 이름도 바꿔준다.

컬럼 추가
mysql> ALTER TABLE bbs ADD name varchar(10);

ALTER TABLE tablename ADD 컬럼이름 컬럼속성

컬럼 삭제
mysql> ALTER TABLE bbs DROP colname;


특정 컬럼 뒤에 새로운 컬럼 추가
mysql> ALTER TABLE bbs ADD newcol varchar(10) AFTER num;

num 컬럼 뒤에 newcol 컬럼 추가.

기존 컬럼을 지우고 맨 앞에 컬럼 추가
mysql> ALTER TABLE bbs DROP newcol, ADD newcol VARCHAR(10) FIRST;

맨 앞에 추가하려면 FIRST를 사용한다.

PRIMARY KEY 속성 삭제
mysql> ALTER TABLE test DROP PRIMARY KEY;


이미 PRIMARY KEY인 컬럼의 속성을 바꿀 때
PRIMARY KEY 속성은 지정하지 말고, NOT NULL 속성을 함께 지정해 주면 기존 PRIMARY KEY 속성은 그대로 남은 상태로 컬럼의 속성을 변경할 수 있다.
mysql> ALTER TABLE test MODIFY a CHAR(1) NOT NULL;


테이블의 내용 전체 삭제
mysql> TRUNCATE TABLE tablename;

트랜잭션에 의해 복구될 수 없다.

'개발지식창고 > DataBase' 카테고리의 다른 글

MySQL : Data Type (1 of 2)  (0) 2010.08.31
MFC MYSQL 연동  (0) 2010.08.31
[MySQL] 기본명령어  (0) 2010.08.31
[MySQL] 데이타베이스명령어  (0) 2010.08.31
[MySQL] MySQL 기본 명령어 정리  (0) 2010.08.31
Posted by 모과이IT
,

MySQL의 기본 명령어와 SQL문 정리. 내가 RDBMS에 완전 문외한이기 때문에 기본 SQL쿼리까지...
Redhat Linux 7.3, MySQL 3.23.58 에서 테스트함.
설치는 Redhat 기본 제공 RPM으로 했다.

데이터베이스 접속
$ mysql -u 사용자명 -p dbname

설치 직후에는 root 사용자에 비밀번호가 없으므로 다음과 같이 접속하여 MySQL을 관리할 수 있다.

$ mysql -u root mysql


비밀번호 변경
MySQL을 설치한 직후에는 root 계정에 암호가 지정되어 있지 않다.
다음 세가지 방법으로 비밀번호를 변경 할 수 있다.

  • mysqladmin이용
    $ mysqladmin -u root password 새비밀번호

  • update문 이용
    $ mysql -u root mysql

    mysql> UPDATE user SET password=password('새비밀번호') WHERE user='root';
    mysql> FLUSH PRIVILEGES;


  • Set Password 이용
    SET PASSWORD FOR root=password('새비밀번호');


일단 root 비밀번호가 설정된 상태에서는 mysql이나 mysqladmin 명령을 실행할 때 -p 옵션을 붙여주고 기존 비밀번호를 입력해야만 한다.

사용자 추가/삭제
mysql> GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'password';

username 이라는 사용자를 password라는 비밀번호를 갖도록 하여 추가한다. username은 dbname이라는
데이타베이스에 대해 모든 권한을 가지고 있다.
username 사용자는 로칼 호스트에서만 접속할 수 있다. 다른 호스트에서 접속하려면
GRANT ALL PRIVILEGES ON dbname.* TO username@'%' IDENTIFIED BY 'password';

위를 또한 번 실행한다. '%'에서 홑따옴표를 주의한다.
추가 : '%'를 호스트네임으로 지정해도 모든 호스트에서 접속할 수 없었다. 각 호스트별로 다 지정해야 했다.
아래 댓글에서 rukikuki님이 알려주셨습니다.
GRANT ALL PRIVILEGES ON testdb.* TO 'username'@'%' IDENTIFIED BY 'password' ;
처럼 'username' 이런식으로 홑따옴표를 username 에도 붙여야 하더군요..


불필요한 사용자 삭제는
mysql> DLETE FROM user WHERE user='username';
mysql> FLUSH PRIVILEGES;


데이터베이스 생성/보기

  • 데이터베이스를 생성하고,
    mysql> CREATE DATABASE dbname;

  • 현재 존재하는 데이터베이스 목록을 보여준다.
    mysql> SHOW DATABASES;

  • 특정 데이타베이스를 사용하겠다고 선언한다.
    mysql> USE dbname;

  • 쓸모 없으면 과감히 삭제한다.
    mysql> DROP DATABASE [IF EXISTS] dbname;

    IF EXISTS 옵션은 비록 데이타베이스가 없더라도 오류를 발생시키지 말라는 의미이다.


테이블 생성/보기

  • 테이블을 생성하고,
    mysql> CREATE TABLE tablename (
    column_name1 INT,
    column_name2 VARCHAR(15),
    column_name3 INT );

  • 현재 데이타베이스의 테이블 목록을 보고
    mysql> SHOW TABLES;

  • 테이블 구조를 살펴본다.
    mysql> EXPLAIN tablesname;
    혹은
    mysql> DESCRIBE tablename;

  • 이름을 잘못 지정했으면 이름을 변경할 수도 있다.
    mysql> RENAME TABLE tablename1 TO tablename2[, tablename3 TO tablename4];

  • 필요 없으면 삭제한다.
    mysql> DROP TABLE [IF EXISTS] tablename;



현재 상태 보기

mysql> status

--------------
mysql Ver 11.18 Distrib 3.23.58, for pc-linux (i686)

Connection id: 26
Current database: study
Current user: study@localhost
Current pager: stdout
Using outfile: ''
Server version: 3.23.58
Protocol version: 10
Connection: Localhost via UNIX socket
Client characterset: latin1
Server characterset: euc_kr
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 2 hours 9 min 59 sec

Threads: 1 Questions: 160 Slow queries: 0 Opens: 28 Flush tables: 1
Open tables: 1 Queries per second avg: 0.021
--------------



INSERT
mysql> INSERT INTO tablename VALUES(값1, 값2, ...);

혹은

mysql> INSERT INTO tablename (col1, col2, ...) VALUES(값1, 값2, ...);


SELECT
mysql> SELECT col1, col2, ... FROM tablename;

컬럼명을 *로 하면 모든 컬럼 의미.

mysql> SELECT col1 AS '성명', col2 AS '국어점수' FROM grade;

컬럼의 이름을 바꿔서 출력.

mysql> SELECT * FROM tablename ORDER BY col1 DESC;
mysql> SELECT col1, korean + math english AS '총점' FROM tablename ORDER BY '총점' ASC;

DESC는 내림차순 ASC는 오름차순.

mysql> SELECT * FROM grade WHERE korean < 90;

조건줘서 SELECT.

mysql> SELECT * FROM grade LIMIT 10;

결과중 처음부터 10개만 가져오기

mysql> SELECT * FROM grade LIMIT 100, 10;

결과중 100번째부터 10개만 가져오기. 첫번째 레코드는 0번 부터 시작한다.

UPDATE
mysql> UPDATE tablename SET col1=새값 WEHER 조건


DELETE
mysql> DELETE FROM tablename WEHRE 조건


mysql에서 쿼리 결과 세로로 보기
-E 옵션을 줘서 실행한다.
$ mysql -E -u root -p mysql


mysql에서 발생한 오류나 경고 다시 보기
mysql> show errors;
mysql> show warnings;

'개발지식창고 > DataBase' 카테고리의 다른 글

MySQL : Data Type (1 of 2)  (0) 2010.08.31
MFC MYSQL 연동  (0) 2010.08.31
[MySQL] 기본명령어  (0) 2010.08.31
[MySQL] 데이타베이스명령어  (0) 2010.08.31
[MySQL]MySQL 테이블수정  (0) 2010.08.31
Posted by 모과이IT
,