MySQL 데이터베이스 서버
요약:
MySQL은 SQL(Structured Query Language:구조적 질의어) database server이다.
리눅스를 포함한 많은 플랫폼을 지원하고, 특히 리눅스 버전은 수행 속도가 매우 빠르다.
들어가는 글
MySQL은 SQL(Structured Query Language:구조적 질의어) database server이다.
MySQL은 client-server 응용 프로그램으로서 서버와 많은 client로 구성되어 있다.
SQL database에 대해서 설명을 하는 것은 매우 복잡한 일이다.
관계형 데이타 베이스의 유래부터 설명을 해야할 뿐만 아니라 이것은
이 글의 목적이 아니다. 따라서 SQL 서버에 대해서 간단히 살펴보겠다.
1981년에 IBM은 SQL을 개발하였다. 그 이후 SQL제품은 관계형 데이타 베이스에서
가장 기초적인 역할을 담당하게 되었다. IBM은 SQL(더 뒤에 채택되었다)을 American
National Standards Institute(ANSI;미국표준위원회)에 제출하였고, 그 후 관계형
데이타 베이스에서 일반화 되었다. 1983년에 만들어진 DB2는 인기있는 database가
되었고, 지금까지도 많은 메인프레인급 컴퓨터에서 널리 쓰이고 있다.
보통 GNU에서 관계형 database에 대한 예기를 할 땐 MySQL을 얘기한다.
MySQL은 GNU 형식의 라이센스를 가지고 있지 않기 때문에, 보통 리눅스 배포판에는
포함되어 있지 않다. 즉 MySQL을 상업적 목적으로 이용하려면 라이센스가 필요하다.
MySQL은 (이 글에서도 언급했다시피) 동급의 서버와 비교했을 때 매우 빠르고,
데이터의 양이 크거나 작거나 매우 안정적이다. 뒤에서 말하겠지만, 처리 속도가
빠른 것은 SQL의 일반적인 몇가지 특징을 없애서 그렇다.
MySQL은 (소스든 바이너리든) Linux 2.0.x, SCO, Solais 2.5, 2.6,
SunOS 4.x, BSDI 2.x, 3.0, SGI IRIX 6.x, AIX 4.x, DEC UNIX 4.x,
HPUX 1020, Windows 95, 등 거의 모든 OS에서 사용할 수 있다.
자유롭게 무료로 이용할 수 있는 버전은 Michael Windenis가 만들었고,
상용 버전은 TCX Datakonsulter AB에 의해 배포된다.
MySQL의 특징
- MySQL의 기본목표은 속도와 안정성이다.
- C, C++로 작성되었고, GCC 2.7.2.1에서 테스트되었다.포팅을 위해 GNU autoconf를 사용한다.
- C, C++, JAVA, Perl, TCL로 클라이언트를 만들 수 있다.
- 멀티 프로세서를 지원한다. 사용자가 가능하다면, 서버는 여러 개의 CPU를 사용할 수 있다.
- 다양한 플랫폼과 OS에서 작동한다.
- 시스템의 암호와 권한이 매우 유연하고(flexible) 안전하다.
- 모든 암호는 네트웍 상에서 암호화되어 전송된다.
- 변수와 고정된 크기의 레코드(record)
- 테이블당 16개의 인덱스가 있고, 각각의 인덱스는 1에서 15개의 컬럼으로 구성되거나,
최대 127 바이트길이내의 컬럼부분으로 구성할 수 있다.
- 모든 컬럼들은 기본 값을 가질 수 있다.
- 최적화하거나 테이블을 고치기 위한 유틸리티(Isamchk)가 존재한다.
- 모든 데이타는 ISO8859_1 형식으로 저장되다.
- 클라이언트는 서버와 통신을 하기 위해서 소켓(socket)이나, TCP를 이용할 수 있다.
- 서버에서 에러가 발생하면 여러 언어로 에러 메시지를 보여준다.
- 모든 명령어는 -help나 -? 옵션을 가지고 있어서 도움말을 볼 수 있다.
- 컬럼은 여러 형식(type)이 될 수 있다.(integer(1,2,4,5,8 바이트), float, double recision,
character, dates, enum 등등)
- Windows 95를 위한 ODBC가 있다(소스와 함꼐), ACCESS가 서버와 연결하기 위해 쓰일 수 있다.
설치
설치하려면 우선 소스 코드를 웹에서 다운로드 받아야 한다.:
http://www.tcx.se
FTP를 이용할 수도 있다. :
ftp://ftp.sunet.se/pub/unix/databases/relational/mysql
우선 소스 코드를 받을 것인지 아니면 바이너리로 받을 것인지 결정을 해야 한다.
바이너리로 받을 경우는 설치할 플랫폼에 대한 바이너리가 이미 있는지 알아야 한다.
(대부분의 플랫폼에 대해 이미 바이너리는 존재한다.)
바이너리 설치
다운로드 받는다.:
mysql-Version.tar.gz
압축을 푼다. 여기에는 여러가지 방법이 있는데 필자는 다음 방식을 좋아한다.:
- 압축을 먼저 푼다. :
gunzip -dfv mysql-Version.tar.gz
- 아카이브된 것을 다시 푼다.:
tar -xvf mysql-Version.tar
만약 /usr/local에서 압축을 풀었다면, 다음 디렉터리에서 압축이 풀린 파일을 볼 수 있을 것이다.
/usr/local/mysql-3.20.32a-pc-linux-gnu-i586
위와 같은 디렉터리이름은 실제로 잘 사용하지 않는다. 따라서 다음과 같이 심볼릭(소프트) 링크를
하는 것을 추천한다.
> ln -s mysql-3.20.32a-pc-linux-gnu-i586/bin mysql
이제 mysql 디렉터리의 구성은 다음과 같을 것이다:
- drwxr-xr-x 8192
Nov 24 1993 bin
-
drwxr-xr-x 8192 Nov
24 1993 etc
-
drwxr-xr-x 8192 Aug
17 1997 i18n
-
drwxr-xrx 8192 Mar
16 1994 include
-
drwxr-xr-x 8192 Mar
19 02:03 jdk1.1.3
-
drwxr-xr-x 8192 Aug
17 1997 jre
-
drwxr-xr-x 8192 Mar
16 1994 lib
-
lrwxrwxrwx 36 Jan
18 19:40 mysql
- drwxr-xr-x 8192
Feb 5 00:07 mysql-3.20.32a-pc-linux-gnu-i586
-
drwxr-xr-x 8192 Nov
24 1993 sbin
-
drwxr-xr-x 8192 Nov
24 1993 src
-
'cd mysql'에서 MySQL 바이너리를 찾을 수 있다. 모든 것이 다 되었으면
이제 데이터베이스 서버를 실행 시킬 준비가 잘 된 것이다.
소스로 설치하기
위에서 압축을 풀었던 것처럼 압축을 푼다.
- cd mysql-Version
- ./configure
-
- make install
-
소스 코드 배포판에는 설치과정에 대한 많은 문서들이 있다.
알려진 버그나 특정 플랫폼에 대한 문서와 많은 OS에 대한 설명
FAQ와 설정하는데 필요한 설명도 있다. 설치가 잘 되었다면,
바이너리 설치때와 비슷한 디렉터리를 볼 수 있다.
소스 코드를 통한 설치는 설치를 많이 해본 사용자와 컴파일 하는
오랜 동안 기다릴만한 인내심을 가진 자, 컴파일 동안 많은 에러를 잘
참을 수 있는 사용자에게 권하는 바이다.
첫 단계: 관리하기(보안)
위의 설치 과정을 성공적으로 마쳤다면, 다음과 같은 디렉터리를 볼 수 있을 것이다 :
/usr/local/mysql-3.20.32a-pc-linux-gnu-i586
위의 디렉터리에는 다음과 같은 파일과 디렉터리가 있을 것이다.:
- -rw-r--r-- 1
root root 4133 Oct 1 1997 INSTALL-BINARY
-
-rw-r--r-- 1 root
root 16666 Oct 7 21:10 INSTALL-SOURCE
-
-rw-r--r-- 1 root
root 24088 Oct 27 23:06 NEWS
-
-rw-r--r-- 1 root
root 3562 Apr 11 1997 PORTING
-
-rw-r--r-- 1 root
root 8512 May 21 1997 PUBLIC
-
-rw-r--r-- 1 root
root 1963 Jul 31 1997 README
-
-rw-r--r-- 1 root
root 3416 Jun 4 1997 TODO
-
drwxr-xr-x 6 root
root 8192 Oct 28 00:44 bench
-
drwxr-xr-x 2 cuenta1
users 8192 Mar 27 00:42 bin
-
drwxr-xr-x 5 root
root 8192 Mar 31 00:26 data
-
drwxr-xr-x 2 root
root 8192 Oct 28 00:44 include
-
drwxr-xr-x 2 root
root 8192 Oct 28 00:44 lib
-
-rw-r--r-- 1 root
root 132883 Jun 8 1997 mysql-faq.html
-
-rw-r--r-- 1 root
root 117622 Jun 10 1997 mysql-faq.txt
-
-rw-r--r-- 1 root
root 9301 Jun 8 1997 mysql-faq_toc.html
-
drwxr-xr-x 4 root
root 8192 Oct 28 00:44 mysqlperl
-
drwxr-xr-x 2 root
root 8192 Oct 28 00:44 scripts
-
drwxr-xr-x 3 root
root 8192 Oct 28 00:44 share
-
drwxr-xr-x 2 root
root 8192 Oct 28 00:44 tests
-
설치 과정에 대한 좀더 많은 정보를 보려면, README, TODO, INSTALL, mysql-faq
등의 문서를 읽어보기 바란다.(이 글은 위의 글들을 기초로 삼았다.)
/data디렉터리는 새로 만들어진 데이타베이스들이 저장되는 디렉터리이다.
처음 설치를 하면 기본적으로 보안을 위한 “mysql”이라는 데이타베이스가 있다.
/bench 디렉터리에는 많은 SQL 예제들이 있다. 바이너리로 설치하는 것보다
소스코드로부터 설치하는 경우가 더 많은 예제들을 포함하고 있다.
/share디렉터리에는 서버가 지원하는 여러 언어로된 에러 메시지가 있다.
/include와 /lib디렉터리에는 헤더 파일과 라이브러리 파일이 존재한다.
/bin 디렉터리에는 많은 실행 파일이 있고,다음과 같이 매우 중요한 파일을 담고 있다.:
`mysql'
SQL 쉘이다. 인터렉티브하게 사용되거나 인터랙티브하지 않게 사용될 수 있다.
`mysqladmin'
관리 도구이다. 데이타베이스를 새로 만들거나 삭제할 수 있고, 프로세스에 대한 정보와
버전에 대한 정보를 보여준다.
`mysqld'
SQL 데몬이다. 이 데몬은 항상 실행 중이어야 한다.
`mysqlshow'
데이타 베이스에 대한 정보와 데이타 베이스의 테이블과 필드에 대한 정보를 보여준다.
`safe_mysqld'
“mysqld”를 실행하는 파일이다..
`mysqlaccess'
호스트, 사용자, 데이타 베이스등에 대한 사용 권한을 확인하는 스크립트이다.
`mysqlbug'
서버에서 발생한 버그를 기록한다.
`mysql_install_db'
기본 권한에 대한 커다란 테이블을 생성한다. 보통 인스톨한 다음 실행한다.
`isamchk'
테이블을 확인하고 고치거나, 최적화 한다.
보안
MySQL의 보안 시스템은 사용자가 (더도 덜도 아닌) 주어진 권한만큼의 작업을 할 수 있도록 한다.
시스템은 “어떤 호스트”에서 접속한 “어떤 사용자”가
“어떤 데이타 베이스”에 연결하려는지에 대한 권한을 설정한다.
시스템의 권한은 “mysql”이라는 데이타베이스에 기초를 한다.
“mysql” 데이타베이스에는 “USER”, “HOST”와
“DB”라는 테이블이 있다.(여기서 말하는 mysql이라는 데이타베이스는
MySQL을 설치하면 기본적으로 설치되어 있는 데이타베이스를 말한다.)
위의 세 개의 테이블에 있는 컬럼들은 다음과 같다.:
데이터베이스명: mysql
테이블: db
필드(Field) |
형식(Type) |
Null |
키(Key) |
기본값(Default) |
Extra |
Host |
char(60) |
|
PRI |
|
|
Db |
char(32) |
|
PRI |
|
|
User |
char(16) |
|
PRI |
|
|
Select_priv |
char(1) |
|
|
N |
|
Insert_priv |
char(1) |
|
|
N |
|
Update_priv |
char(1) |
|
|
N |
|
Delete_priv |
char(1) |
|
|
N |
|
Create_priv |
char(1) |
|
|
N |
|
Drop_priv |
char(1) |
|
|
N |
|
Table: host
필드(Field) |
형식(Type) |
Null |
키(Key) |
기본값(Default) |
Extra |
Host |
char(60) |
|
PRI |
|
|
Db |
char(32) |
|
PRI |
|
|
Select_priv |
char(1) |
|
|
N |
|
Insert_priv |
char(1) |
|
|
N |
|
Update_priv |
char(1) |
|
|
N |
|
Delete_priv |
char(1) |
|
|
N |
|
Create_priv |
char(1) |
|
|
N |
|
Drop_priv |
char(1) |
|
|
N |
|
Table: user
필드(Field) |
형식(Type) |
Null |
키(Key) |
기본값(Default) |
Extra |
Host |
char(60) |
|
PRI |
|
|
User |
char(16) |
|
PRI |
|
|
Password |
char(16) |
|
|
|
|
Select_priv |
char(1) |
|
|
N |
|
Insert_priv |
char(1) |
|
|
N |
|
Update_priv |
char(1) |
|
|
N |
|
Delete_priv |
char(1) |
|
|
N |
|
Create_priv |
char(1) |
|
|
N |
|
Drop_priv |
char(1) |
|
|
N |
|
Reload_priv |
char(1) |
|
|
N |
|
Shutdown_priv |
char(1) |
|
|
N |
|
Process_priv |
char(1) |
|
|
N |
|
File_priv |
char(1) |
|
|
N |
|
테이블에 SELECT, INSERT, UPDATE와 DELETE할 권한을 줄지 안줄지 결정할 수 있다.
또, 테이블과 데이타베이스를 CREATE(생성)하거나 DROP(삭제)할 권한을 줄 수도 안 줄 수도 있다.
재미있는 권한들도 있는데 “shutdown”과 “reload”, “process” 등등이 있다.
현재 어떤 권한이 설정되어 있는지는 “mysqlaccess”를 이용해서 조사할 수 있다.
HOST는 항상 “host local”이나 IP 주소, 혹은 SQL 표현이어야 한다. 만약
“db” 테이블에서 host 컬럼이 비어었다면, “host” 테이블에 있는 “어떤 호스트”도를 의미한다.
반면, “host”와 “user” 테이블에서 host 컬럼이 비어 있다면, 전세계 어떤 호스트도
우리 서버에 TCP로 연결될 수 있다는 것을 의미한다.
Db는 데이터베이스의 이름이다.
"USER" 컬럼이 비어 있다면, “어떤 user”도를 의미한다.
첫 단계
서버를 작동시키는 가장 빠른 방법은 다음과 같다.:
mysql.server start
멈추기 위해서는 다음 명령을 내린다.:
mysql.server stop
물론 “mysqld”로도 같은 일을 할 수 있다. 설치안내부분에서
말했다시피 mysqld 데몬을 실행시킬 뿐이다.
쉽게 얘기하자면, 서버가 실행중인 상태에서만 데이타 베이스를 이용할 수 있다.
일단 서버가 작동 중이라면,“mysqladmin”이라는 명령어를 실행 시킬 수 있다.:
mysqladmin [OPTIONS] command command …
다음과 같은 옵션이 제공된다.:
- -f, --force 테이블을 지울 때 사용자 확인을 받지 않는다.
- -?, --help 현재의 도움말 메뉴를 보여준다.
-
-h, --host=# 호스트에 연결한다.
-
-p, --password[=...] 서버에 접근하기 위한 암호
-
-P --port=...
접속에 사용되는 포트 번호
-
-S --socket=...
접속에 사용되는 소켓파일
-
-u, --user=#
현재 사용자가 아니라면 연결할 때 사용자
- -V, --version
현재 서버의 버젼에 대한 정보를 보여준다.
-
command는 다음과 같은 것이 될 수 있다.:
- create 데이터베이스_이름
새로운 데이터베이스를 생성한다.
- drop 데이터베이스_이름
해당 데이터베이스에 들어있는 테이블을 지우고 데이터베이스를 삭제한다.
- kill 프로세스_아이디
mysql과 연결된 프로세스들을 죽인다.
- processlist
현재 서버에서 실행중인 프로세스들을 보여준다.
- shutdown
서버를 셧다운시킨다.
- status
서버의 현재상태를 보여준다.
- version
서버의 버젼을 보여준다.
예를 들어서 다음 명령을 살펴보자. :
mysqladmin create newdatabase
"newdatabase"라는 데이타베이스를 새로 만든다.
다음 명령은 서버에 의해 수행 중인 프로세스를 볼 수 있다.
mysqladmin processlist
또 중요한 명령으로는 mysqlshow가 있는데, 이 명령은
사용가능한 데이터베이스들의 목록을 보여준다. 즉 서버에 존재하는 데이터베이스들을 보여준다.
mysqlshow 데이터베이스라고 치면 지정한 데이터베이스에 어떤 테이블이 있는지를 보여준다.:
> mysqlshow
+-----------+
| Databases |
+-----------+
| mysql |
| people |
| test |
+-----------+
MySQL에서의 SQL 언어
이미 '들어가는 말' 부분에서 MySQL이 동급의 서버 중에서 크고 작은 데이터를 처리할 때
가장 빠른 것 중의 하나라고 말을 하였다. 또한 그렇게 속도가 빠른 것은 SQL의
몇가지 일반적인 특징을 구현하지 않았기 때문이라고 하였다(중요하다).
구현하지 않는 것 중 중요한 두 가지는 트리거(Trigger)와 트랜잭션(Transaction)이다.
트리거는 데이터에 어떤 동작(UPDATE, DELETE 등)이 일어나면 지정된 동작을 수행하도록
하는 것이다. 트리거를 테스트 해보았더니, 트리거는 시스템의 자원을 많이 사용한다는 것을
알았다. 이 때문에 MySQL에서 구현되지 않았다.
데이타베이스에서 일관성(consistency)는 매우 중요하다. 일관성을 위해서 SQL은
여러 툴을 제공한다. 서버는 파일을 블럭(block)하고, 수행했던 일을 되 돌아오는 일에 대한
메카니즘을 제공해야 한다. 그런데, MySQL에서는 속도를 높이기 위해서 트랜잭션을 제공하지 않는다.
(MySQL의 문서에 그렇게 나와있다) 다만 테이블을 블럭하기 위해서 LOCK테이블, UNLOCK테이블을 이용할 수 있지만,
수행 했던 일을 취소할 수는 없다.(즉, UNDO 기능이 없다.)
서버의 제약조건들을 염두에 두고 SQL 명령에 대해서 알아보자.
SQL의 명령을 설명하려는 것은 아니고, 다만 서버가 SQL 명령을 어떻게
구현하는지를 보고자 한다.
일단 서버가 실행되었으면 이제부터 명령을 줄 수 있다. 예를 들어 "clients",
"states"와 "countries"의 테이블로 구성된 "people"이라는 데이타베이스를 만들 수 있다.
위의 예는 그리 좋지 않은 예이지만, 간단하고, 실제로 데이타가 어떻게 다루어지게 되는지를
보여 준다.
이러한 일은 많은 방법을 이용해서 할 수 있다. C, C++과 JAVA의 API를 이용할 수도 있고,
win95를 쓰고 있다면, ODBC를 이용할 수도 있다. 또한 MySQL에 있는 쉘을 이용할 수도 있다.
이 글의 목적은 프로그래밍 언어를 가르치는 것이 아니므로 우리는 쉘을 이용하기로 한다.
MySQL의 쉘은 다음과 같이 시작할 수 있다.:
mysql databasename
쉘 프롬프트가 보이면 이제 서버에게 명령을 내릴 수 있다.
배치(batch) 모드로 다음과 같이 시작을 할 수 있다.:
mysql -e
(“SQL command …… “)databasename
위 명령은 서버에게 SQL 명령을 내리게 한다..
"people"이라는 데이타베이스를 만들기 위해서는 다음과 같이 한다.:
mysqladmin create people
다음 쉘을 시작한다.
mysql people
이제 쉘을 이용해서 우리는 서버에 명령을 내릴 수 있다. 예를 들어 현재 데이타베이스에서
사용할 수 있는 테이블의 목록을 보기 원하면 :
> show tables /g
라고 하면, 다음과 같이 나온다.:
Database: people
+-------------+
| Tables |
+-------------+
| clients |
| counties |
| states |
+-------------+
서버로 보내는 모든 명령은 ';'로 끝난다. ';'를 만나면 명령을 서버에 보내게 된다.
당연히 위와 같은 결과는 CREAT명령을 이용하여 해당 테이블을 만들어야 볼 수 있다.
일반적인 CREATE명령은 다음과 같이 사용한다.:
CREATE TABLE clients
(NIF CHAR(9) NOT NULL PRIMARY KEY,
Name CHAR(15) NOT NULL,
Family_name CHAR(35) NOT NULL,
Address CHAR(50) NOT NULL,
City INT(5) NOT NULL,
State INT(2) NOT NULL,
Phone INT(9),
Date DATE NOT NULL) /g
CREATE TABLE states
(Cod_state INT(2) NOT NULL PRIMARY KEY,
Description_s CHAR(30) NOT NULL) /g
CREATE TABLE counties
(Cod_state INT(2) NOT NULL,
Cod_county INT(3) NOT NULL,
Description_c CHAR(30) NOT NULL,
PRIMARY KEY(Cod_state,Cod_county)) /g
이제 다음과 같은 명령을 내리면
> show colums from
clients from people /g
> show columns
from states from people /g
> show columns from
counties from people /g
다음과 같이 나타난다.
Database: people Table: clients Rows: 4
+--------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+----------+------+-----+---------+-------+
| NIF | char(9) | |PRI | | |
| Name | char(15) | YES | | | |
| Family_name | char(35) | | | | |
| Address | char(50) | | | | |
| City | int(5) | | | 0 | |
| State | int(2) | | | 0 | |
| Phone | int(9) | YES | | | |
| Date | date | YES | | | |
+--------------+----------+------+-----+---------+-------+
Database: people Table: states Rows: 3
+-----------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key| Default | Extra |
+-----------------+----------+------+-----+---------+-------+
| Cod_state | int(2) | | PRI | 0 | |
| Descripcion_s | char(30) | | | | |
+-----------------+----------+------+-----+---------+-------+
Database: people Table: counties Rows: 9
+------------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key| Default | Extra |
+------------------+----------+------+-----+---------+-------+
| Cod_state | int(2) | | PRI | 0 | |
| Cod_county | int(3) | | PRI | 0 | |
| Descripcion_c | char(30) | | | | |
+------------------+----------+------+-----+---------+-------+
이제 data를 각 테이블에 삽입할 수가 있다. 프로그래밍 언어나 API를 쓰지 말고,
SQL 명령을 써서 데이타를 삽입하여 보자.:
"clients", "counties"와 "states" 테이블에 레코드를 삽입하기 위해서 다음과 같이 하면 된다.:
- INSERT INTO clients
VALUES
-
("5316828K","PEDRO","ROMERO
DIAZ","C/ HOLA 9 ",29003,29,911111111,19980203)
- /g
-
- INSERT INTO counties
VALUES
-
(28,001,"Fuenlabrada")
/g
-
- INSERT INTO states
VALUES
-
(08,"Barcelona")
/g
-
마지막으로 SELECT를 이용해서 삽입한 record를 보자. 조건을 주어 조건에 맞는 레코드만을
찾을 것이다. :
> SELECT ALL
Cod_state, Cod_county, Description_c from counties
where Cod_state = 28 /g
Cod_state Cod_county Description_c
28 1 Fuenlabrada
28 2 Pozuelo
28 3 Madrid
> SELECT ALL
NIF,Name,Family_name,Address from clientes
where City =
28001
- NIF Name
Family_name direccion
-
2416728U JOSE FERNANDEZ
ROMERO C/ FELIZ 1 3G
-
- > SELECT ALL
NIF,Name,Family_name,Address from clients
-
where State =
29
-
-
NIF Name Family_name Address
23198623N JUAN ANDRES RUIZ MORALES C/ CATEDRAL 12 2B
5316828K PEDRO ROMERO DIAZ C/ HOLA 9
52312844J LUIS ALBERTO LISTO JIMENEZ C/ ROSA DE LOS VIENTOS 129 3I
마치는 글
이 글은 MySQL의 기본적은 특징을 알아 보기 위해서 쓰여졌다. MySQL의 명령이나, 사용상의
기법을 알려주기 위해 쓰인 것이 아니다. 대신 MySQL의 제한과 MySQL로 가능한 일을
공부했다. 프로그램의 제한 특징을 잘 이해하는 것은 작업을 하는데 매우 큰 장점이 될 것이다.
MySQL에서는 트리거와 트랜잭션을 생략하였으므로, 많은 사용자와 복잡한 테이블을 다루는데는
사용이 부적합하다. 대신 필자는 큰 데이타베이스에 빠른 속도를 요하는 프로그램에 MySQL을
추천하는 바이다.
마지막으로 이 기사의 대부분 정보는 MySQL 배포판에 같이 온 문서와 잡지, IBM의 SQL
매뉴얼에 기초하였음을 밝혀 둔다.
번역 : 허정수
|