![]() Jose M. Fernández 필자 소개: 차례: 들어 가는 말 MySQL의 특징 MySQL의 설치 첫 단계: 관리하기(보안) MySQL에서 SQL 언어 마치는 글 |
MySQL |
| 테이블 |
|---|
| db |
| host |
| user |
| 필드(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 |
| 필드(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 |
| 필드(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물론 mysqld로도 같은 일을 할 수 있다. 설치안내부분에서 말했다시피 mysqld 데몬을 실행시킬 뿐이다.
쉽게 얘기하자면, 서버가 실행중인 상태에서만 데이타 베이스를 이용할 수 있다. 일단 서버가 작동 중이라면,mysqladmin이라는 명령어를 실행 시킬 수 있다.:
mysqladmin [OPTIONS] command command &다음과 같은 옵션이 제공된다.:
command는 다음과 같은 것이 될 수 있다.:
예를 들어서 다음 명령을 살펴보자. :
mysqladmin create newdatabase"newdatabase"라는 데이타베이스를 새로 만든다.
다음 명령은 서버에 의해 수행 중인 프로세스를 볼 수 있다.
mysqladmin processlist또 중요한 명령으로는 mysqlshow가 있는데, 이 명령은 사용가능한 데이터베이스들의 목록을 보여준다. 즉 서버에 존재하는 데이터베이스들을 보여준다. mysqlshow 데이터베이스라고 치면 지정한 데이터베이스에 어떤 테이블이 있는지를 보여준다.:
> mysqlshow
+-----------+
| Databases |
+-----------+
| mysql |
| people |
| test |
+-----------+
이미 '들어가는 말' 부분에서 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라고 하면, 다음과 같이 나온다.:
+-------------+
| Tables |
+-------------+
| clients |
| counties |
| states |
+-------------+
서버로 보내는 모든 명령은 ';'로 끝난다. ';'를 만나면 명령을 서버에 보내게 된다.
당연히 위와 같은 결과는 CREAT명령을 이용하여 해당 테이블을 만들어야 볼 수 있다. 일반적인 CREATE명령은 다음과 같이 사용한다.:
CREATE TABLE clients
CREATE TABLE states
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" 테이블에 레코드를 삽입하기 위해서 다음과 같이 하면 된다.:
마지막으로 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 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
매뉴얼에 기초하였음을 밝혀 둔다.
번역 :
| 본 웹사이트는 Miguel Angel Sepulveda씨에 의해 관리됩니다. LinuxFocus 1998 |