요즘 Linux+PHP+Apache+MySQL 연동하여 홈페이지를 만드는 것에 흥미가 생겨버렸다. 그래서 이 오래된 글을 올립니다. 최신 영문판을 입수하면 번역도 하고싶지만 영어실력이 딸리는 편에 아직 DB에 대한 기초 지식이 별로 없기 때문에 이 글을 읽으면서 DB에 대한 개념을 알아야겠습니다.
http://doc.kldp.org/Translations/MySQL_Tutorial-KLDP

이 글은 KLDP에 올려진 글입니다.
MySQL 튜토리얼

번역: 이상용(sangyong@nownuri.net)
번역일자: 1999년 9월 9일
오타수정: 1999년 10월 13일(capricon@g2j.co.kr님의 지적)

------------------------------------------------------------------------------
다음 문서는 MySQL 3.22.25 버전 매뉴얼의 8장 부분을 번역한 것입니다. 보고
오역이나 내용이 이상하다면 위의 전자우편 주소로 연락해 주면 고맙겠습니다.
직역한 것도 있고 의역한 것도 있고 내용 순서가 바뀐 것도 있고, 제가
추가한 것도 있습니다. 원문과는 내용이 다른 부분도 많을 것입니다.
이점 참고하기 바랍니다.
------------------------------------------------------------------------------

mysql이라는 클라이언트 프로그램을 이용하여 MySQL을 익혀 보도록 하자. mysql은
간단히 데이터베이스를 만들고 사용할 수 있게 해주는 프로그램으로 '터미널 모니터'
혹은 간단히 '모니터'라고도 한다.

mysql은 대화식 프로그램으로서 서버에 연결하고, 질문을 수행하고, 결과를 화면에
보여주는 일을 한다. mysql은 배치 모드(batch mode)에서도 사용할 수 있다.

미리 파일에 sql 명령문을 넣어두고 mysql에게 파일의 명령을 수행하라고 하면
된다(뒤에서 알아 보겠지만 'mysql -vvv < batch_test.txt' 식으로 사용하면 된다).

mysql의 옵션들을 보려면 --help 옵션을 붙여서 실행하면 된다:

shell> mysql --help

이 튜토리얼에서는 mysql이 설치되어 있으며 접근할 수 있는 MySQL 서버가 있다는
것을 가정한다. 그렇지 않으면 MySQL 관리자에게 문의하라(여러분이 관리자라면
MySQL 문서의 다른 부분을 살펴볼 필요가 있을 것이다).

본 튜토리얼에서는 데이터베이스를 설계하고 사용하는 모든 과정을 다룬다. 이미
존재하는 데이터베이스를 사용하는 것에만 관심이 있다면 데이터베이스와 그 안에
있을 테이블을 만드는 방법을 설명한 절은 건너뛰어도 좋다.

튜토리얼 성격의 글이라 자세한 것은 설명되지 않는다. 여기에 언급된 것에 대해
더 자세히 알고 싶거든 MySQL의 관련 매뉴얼을 보면 된다.

shell>은 쉘 프롬프트를, mysql>은 MySQL 프롬프트를 나타낸다.


1. 서버에 연결하기/연결끊기

서버에 접속하려면 mysql 명령을 내릴 때 MySQL 사용자 이름과 대개의 경우
패스워드를 써 주어야 할 것이다. 서버가 여러분이 로긴한 컴퓨터가 아닌 것에서
운영된다면 호스트 이름도 써줄 필요가 있을 것이다(호스트 이름, 사용자 이름,
패스워드). 모든 것을 알았다면 다음처럼 연결할 수 있다:

shell> mysql -h host -u user -p
Enter password: ********

******* 부분은 패스워드다. 'Enter password' 프롬프트가 보이면 패스워드를
쳐주면 된다. 성공하면 간단한 소개 메시지들과 'mysql>' 프롬프트를 볼 수
있을 것이다.

shell> mysql -h host -u user -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 459 to server version: 3.22.20a-log

Type 'help' for help.

mysql>


'mysql>' 프롬프트가 의미하는 바는 준비되었으니 명령어를 입력하라는 말이다.

어떻게 설치하는 가에 따라 MySQL은 로컬 호스트(local host)에서 운영되는
서버에 "무명의 사용자(anonymous user)"로 접속할 수 있게 한다. 이럴 경우에는
단순히

shell> mysql

처럼 해서 연결할 수 있다.

성공적으로 접속하였다면 'mysql>' 프롬프트에서 언제든지 'QUIT'이라고 쳐서
서버에서 나올 수 있다:

mysql> QUIT
Bye

Ctrl키와 D 키를 동시에 눌러 빠져 나올 수도 있다.

이어지는 절에서 나오는 대부분의 예는 서버에 연결한 상태라는 것을 가정한다.
'mysql>' 프롬프트는 서버에 연결된 상태라는 것을 나타낸다.


2. 질문 하기(Entering Queries)

이전 절에서 언급하였듯이 서버에 접속된 것을 확인하자. 이렇게 한다고 작업할
어떤 데이터베이스도 선택하는(역자주: USE 명령어를 이용하여 데이타 베이스를
쓰겠다고 해야지만 사용할 수 있습니다) 것은 아니지만 어쨋든 접속은 해야 한다.
지금 상황에서는 데이터베이스안에 테이블을 만들고, 테이블에 자료를 올리고,
테이블에서 자료를 빼내는 것보다는 질문하는 법을 약간이라도 배우는 게 더
중요하다. 이번 절에서는 명령어 입력의 기본 원칙을 몇가지 질문 예를 통해 알아
본다. 예를 통해 어떻게 mysql이 동작하는지 익숙해질 것이다.

아래에 MySQL의 버전과 오늘 날짜를 출력하는 명령어를 보인다. 'mysql>'
프롬프트다음에 나오는 대로 쳐 넣자. 그리고 엔터키를 친다.

mysql> SELECT VERSION(), CURRENT_DATE;
+-------------+-----------------+
| VERSION() | CURRENT_DATE |
+-------------+-----------------+
| 3.22.20a-log| 1999-03-19 |
+-------------+-----------------+
1 row in set (0.01 sec)
mysql>

이 예로부터 mysql에 대한 몇가지 것들을 알 수 있다:

● 명령은 SQL 문과 그 뒤에오는 세미콜론(;)으로 이루어진다(세미콜론이 필요없는
예외가 있긴하다. QUIT이 그 중 하나다. 나중에 이것에 대해 다시 언급하겠다).

● 여러분이 명령을 내리면, mysql은 서버로 그 명령을 보내어 실행되게 하고, 그
결과를 보여주고 다시 명령 대기 상태 프롬프트('mysqld>')를 낸다.

● mysql은 테이블 형식(행과 열로 이루어진)으로 결과를 보여준다. 첫 행은 각
열에 대한 라벨을 갖고 있다. 두번째 행 부터는 질문의 답이 놓인다. 보통, 열의
라벨은 데이터베이스 테이블에서 가져오는 열의 이름이다. 방금 보인 것처럼
테이블의 열 이름이 아닌 표현식(expression)을 사용할 때는 라벨명은 그 표현식이
된다.

● mysql은 행의 수와 명령 실행 시간(대략적인 서버 성능 측정 도구다)을 보여
준다. 명령 실행 시간은 정확한 값은 아니다. 왜냐하면 이 시간은 wall clock
time(CPU 시간이 아니다)이라는 것과 서버 부하 및 네트워크 부하에 의한
지연시간에 영향을 받기 때문이다(앞으로 나올 예에서는 지금 설명한 부분은
나타내지 않겠다).

키워드(역자 주:'예약어'라고 합니다. 미리 예약된 것이라 마음대로 사용할 수
없는 이름입니다)는 대문자로 하든, 소문자로 하든 상관없다. 아래 세개의 명령은
다 동일하다:

mysql> SELECT VERSION(), CURRENT_DATE;
mysql> SELECT version(), current_date;
mysql> seLect vErSiOn(), current_DATE;

다른 예를 하나 더 살펴보자. mysql을 간단한 계산기로 사용한 예이다:

mysql> SELECT SIN(PI()/4), (4+1)*5;
+-------------------------+
| SIN(PI()/4) | (4+1)*5) |
+-------------+----------+
| 0.707107 | 25 |
+-------------+----------+

지금까지의 예에서 명령어는 비교적 짧았고, 한 줄 짜리였다. 한줄에 여러 명령을
기술할 수 있다. 각 명령을 세미콜론으로 끝내기만 하면 된다:

mysql> SELECT VERSION(); SELECT NOW();
+------------+
| VERSION() |
+------------+
|3.22.20a-log|
+------------+

+-----------------------+
| NOW() |
+-----------------------+
| 1999-03-19 00:15:33 |
+-----------------------+

명령어는 한줄에 모두 다 기술해야만 하는 건 아니다. 긴 명령인 경우 몇 줄에
걸쳐 기술할 수 있다. mysql은 세미콜론을 보고 어디서 명령이 끝나는지를
분간한다(mysql은 임의의 포맷을 갖는 입력을 받아 들인다. 입력 줄을 모아
세미콜론을 볼 때까지 실행한다).

여러 줄에 걸쳐 명령을 준 예를 보자:

mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
+-------------------+-------------+
| USER() | CURRENT_DATE|
+-------------------+-------------+
| joesmith@localhost| 1999-03-18 |
+-------------------+-------------+

여러줄을 입력할 때 첫줄을 입력하고 엔터키를 쳤을때 프롬프트가 'mysql>'에서
'->'로 바뀐 것을 주목하라. 이것은 아직 명령이 다 완성되지는 않았으며, 따라서
더 입력을 기다린다라고 mysql이 여러분에게 알리는 것이다. 프롬프트는 여러분의
친절한 안내자다. 귀한 정보를 여러분에게 알려 준다. 프롬프트가 알려주는
것들을 통해 mysql이 무엇을 기다리고 있는지 항상 알 수 있을 것이다.

명령어 입력 도중 취소하려면 c를 쳐주면 된다:

mysql> SELECT
-> USER()
-> c
mysql>

프롬프트 변화를 잘 보라. c를 친후 'mysql>'로 바뀌었다. 새 명령어를 받아들일
준비가 되었다는 것을 알리는 것이다.

다음 표는 마주치게 될 프롬프트들과 그 의미를 설명한 것이다.


프롬프트 의미
-----------------------------------------------
mysql> 새 명령을 받아 들일 준비가 되었음
-----------------------------------------------
-> 명령어를 여러 줄에 기술할 때 다음 줄을
기다리고 있음을 의미
-----------------------------------------------
'> 다음줄 입력을 나타낸다. 현재 '로 시작하는
문자열을 수집하는 중이라는 것을 나타냄
(문자열 입력을 끝내려면 문자열을 다 입력
한 후 '를 붙여 줄것)
-----------------------------------------------
"> '>와 같다. 단지 차이는 문자열을 '가 아니
라 " 로 두른다는 점이다.
-----------------------------------------------


세미콜론을 붙이는 것을 잊어버려 우연히 혹은 실수로 여러 줄에 걸치는 명령을
입력할 때가 종종 있다. 이 경우 물론 mysql은 입력을 더 기다린다:

mysql> SELECT USER()
->

이럴 때는 mysql은 세미콜론을 기다리고 있는 것이다(여러분은 명령을 제대로
완전히 다 입력했다고 생각하지만 mysql은 그렇지 않다. 세미콜론이 빠졌기
때문이다). 프롬프트가 바뀐것을 눈치 채지 못한다면 결과를 기다리며 한참
동안의 시간을 낭비할 수도 있다. 세미콜론을 쳐 주어 명령을 완성하면
실행결과를 볼수있을 것이다:

mysql> SELECT USER()
-> ;
+--------------------+
| USER() |
+--------------------+
| joesmith@localhost |
+--------------------+

'>와 ">는 문자열을 모으는 중에 나타나는 프롬프트이다. MySQL에서는 문자들을
' 나 " 로 둘러싸면 문자열이 된다(예를 들면 'hello', "goodbye"등이다). 또한
여러 줄에 걸쳐 문자열을 입력할 수도 있다.'> 나 "> 프롬프트가 나타나면 이것은
'나 "로 시작하는 문자열을 포함하는 명령어를 쳐 넣었으나 닫는 ' 나 " 를 아직
쳐 넣지 않았다는 것을 의미하는 것이다. 여러 줄에 걸쳐 문자열을 입력할 때는
상관없다. 하지만 문자열을 여러 줄에 입력하고자 하는 경우가 얼마나 될까?
그다지 많지 않다. 대부분의 경우, '> 나 "> 프롬프트는 닫는 ' 나 " 를
빼먹었다고 알려주는 의미일 것이다. 예를 들면 다음과 같다.

mysql> SELECT * FROM my_table WHERE name = "Smith AND age < 30;
">

위와 같은 SELECT 문을 입력하고 엔터키를 치고 결과를 기다린다 해도 아무 결과도
볼 수 없을 것이다. "왜 아무 반응도 없는 것일까?"라고 이상하게 생각하지 말고
"> 프롬프트가 나타내는 의미를 생각해 보자. 문자열을 닫는 인용 부호를 빼먹었다는
것을 알리고 있다. 사실 위의 문장은 잘못이 있다. "Smith 다음에 "를 빼먹은 것이다.

자, 어떻게 해야 할까? 가장 간단한 방법은 명령을 취소하는 것이다. 그러나 간단히
c를 칠수는 없다. 왜냐하면 c도 "를 입력하기 전까지는 문자열의 일부로 취급을
받을 것이기 때문이다. 대신 "c를 입력하면 된다:

mysql> SELECT * FROM my_table WHERE name = "Smith AND age < 30;
"> "c
mysql>

프롬프트가 mysql>로 되돌려졌다. 물론 이것은 "새 명령어 실행 준비 완료"의
뜻이다.

'>와 ">가 의미하는 바를 기억하는 것은 중요하다. 잘못하여 닫는 인용 부호을
빼먹었을 때 계속 입력하는 것들은 모두 무시되는 듯하게 보이기 때문이다(여기에는
QUIT도 포함된다). 현재 명령을 취소하기 전에 닫는 인용부호를 꼭 써야한다는 것을
모르면 이것은 매우 혼동스러운 일일 것이다.




'컴퓨터 > Linux' 카테고리의 다른 글

하드용량이 꽉차버리다  (0) 2006.01.13
ROOT 계정 생기다  (3) 2006.01.13
E-macs로 C언어코딩하는 flash  (1) 2005.12.19
여러 리눅스 배포판들을 깔면서 생각한점.  (2) 2005.12.03
Ubuntu Linux [Breezy] CD 도착  (1) 2005.11.25
Buy me a coffeeBuy me a coffee

+ Recent posts