본문 바로가기

Data/Python

MySQL 사용법

The Database

데이타베이스는 이제 모든 사람들의 생활에서 없어서는 안될 매우 중요한 부분이 되어졌다. 
데이타베이스가 없다면 우리가 하고 있는 많은 일들은 매우 지루하고, 불편한 일들이 될 것이다.

은행과 대학, 도서관은 이러한 데이타베이스 시스템에 크게 의존하고 있는 기관의 예이며,

인터넷의 검색엔진, 온라인 쇼핑몰또한 데이타베이스를 이용하여 구축되어지고 있다.


데이타베이스는 하나의 컴퓨터가 데이타베이스 서버와 개방적인 상호 관계를 할 수 있도록 
도와주는 도구이자 인터페이스의 역할을 한다. 

T.c.X. DataKonsultAB에 의해 개발된 MySQL 서버는 현재 시장에서 급속하게 성장하고 있는 
SQL(Structured Query Language) 데이타베이스 서버 중의 하나이다.

MySQL은 http://www.mysql.com에서 다운로드 받을 수 있으며, 다른 데이타베이스 서버에서는 보기 드문

배열된 옵션과 유용한 특성을 가진 데이타베이스 프로그램을 제공한다.

무엇보다도 MySQL의 가장 큰 장점은 개인적으로나 상업적으로 그것을 이용하기 바라는 모든 사람들에게

무료로 제공되는 공개용 데이타베이스라는 것이다.

 

MySQL을 사용하여 명확한 어플리케이션을 개발하고 싶다면 MySQL's licensing ection(http://www.mysql.com/Manual 
_chapter/manual_Licensing_and_Support.html)을 참고하기 바란다. 


MySQL 서버는 다음의 내용을 포함하여 헤아릴 수 없이 많은 능력 가지고 있다. 

· 동시 사용자의 수가 무제한적인 처리 능력 
· 50,000,000+ record를 처리할 수 있는 용량 
· 매우 빠른 명령 수행 능력(아마 시장에 나온 데이타베이스 중에 가장 빠를지도 모른다) 
· 쉽고 능률적인 사용자 특권 시스템 

그러나 어쩌면 그 수많은 능력 중에서도 가장 흥미로운 사실은 그것이 무료라는 것이다. 
T.c.X 는 일반 대중에게 공개용 데이타베이스인 MySQL을 무료로 제공하고 있다. 


누가 MySQL 서버를 사용하는가?(So Who's Using MySQL?) 

MySQL 데이타베이스 서버는 다음과 같은 기관들에서 막대한 대중성을 얻어가며 사용되어지고 있다. 

 

· Silicon Graphics (http://www.sgi.com) 

· Siemens (http://www.siemens.com) 


만약 위의 글이 설득력 있기에 충분하지 않다면 더 많은 MySQL 사용자 목록을 
MySQL User's List (http://www.mysql.com/users.html)에서 찾아 보기 바란다. 

이 글은 MySQL 서버의 필수 조작과 기본적인 명령을 수행하기 위한 서버의 셋업, 적절하게 
연결하는 방법을 포함하여 MySQL 서버의 기본적인 운용을 배우는 것을 도울 것이다.


만약 이미 MySQL에 대해서 기본적인 이해를 하고 있다면 이장을 뛰어 넘고 다음 장으로가도 상관없다.

그러나 이 글에 쓰여진 명령어들은 좀 더 수준 높은 명령어를 위 한 기초로서,

MySQL 언어에 있는 가장 중요한 명령어 중의 하나라는 점을 기억하기 바란다. 

 


● Part 1: 미리살펴보기(At First Glance) 
======================================================================================================

 

MySQL은 일반적으로 telnet을 통해 들어간다.

(괜찮은 Telnet 프로그램인 Easyterm은 http://www.arachnoid.com에서 구할 수 있다.)

한번이라도 웹서버에 telnet으로 접속한적이 있다면 MySQL 서버에 접근하는 두 번째 명령어를 준비하기 바란다. 

연결하기 위한 절차는 다음과 같습니다. 

1. telnet 접속하기 : ISP에서 제공된 username(ID)과 password가 필요하다. 


login: haremoon 
Password: ******** 
Last login: Sat May 22 12:52:01 from 203.249.84.223 

Sun Microsystems Inc. SunOS 5.6 Generic August 1997 

You have new mail. 
[haremoon@won /user/center/haremoon]# 



2. MySQL 연결하기

 MySQL 사용을 위해서는 명확하게 주어진 username과 password가 필요하다. 

이 정보는 ISP제공자에게 요청하면 제공된다.


[haremoon@won /user/center/haremoon]# mysql -u root -p mysql 


Syntax : mysql -h hostname -u username -p password database 
실행파일 | 호스트 | db유저 | 패스워드 |사용할 데이타베이스이름 또는 

mysql -h hostname -u username -password=password database

-p 옵션에 의해 패스워드를 입력하는 프롬프트가 나오면 패스워드를 입력한다. 
Enter password: 

만약 MySQL이 올바르게 설치되었고 실행되었다면 다음과 같은 화면을 볼 수 있을 것이다. 


Welcome to the MySQL monitor. Commands end with ; or g. 
Your MySQL connection id is 267 to server version: 3.22.16a-gamma 
Type 'help' for help. 

mysql> 



데이터베이스 리스트 확인

가장 상위개념인 database의 리스트를 확인하는 명령어 이다.


mysql> show databases;

 Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| stockDB            |

| sys                |


데이터베이스 생성하기

아래와 같이 CREATE DATABASE 문으로 testdb란 이름을 가진 데이터베이스를 만든다.


mysql> CREATE DATABASE testdb;

Query OK, 1 row affected (1.51 sec)


 

 

데이타베이스에 이미 연결되어 있다면 MySQL 언어의 여러 가지 명령어를 실행시켜도 좋다. 
그러나 그렇지 않으면 먼저 데이타베이스에 연결하기 위해 다음의 명령을 수행합니다. 


mysql> use study --> 사용할 데이타베이스 
Reading table information for completion of table and column names 
You can turn off this feature to get a quicker startup with -A 

Database changed 
mysql> 


여러분은 지금 데이타베이스에 연결 되어있다.

한가지 주목할 점은 MySQL에서 대부분의 모든 명령어는 세미클론 (;)에 의해 수행된다는 것이다. 

우선 커맨드 라인에서 help, h 또는 ? 라고 입력하면 간단한 명령어 도움말을 볼 수 있다. 


mysql> help 

MySQL commands: 
help (h) Display this text 
? (h) Synonym for `help' 
clear (c) Clear command 
connect (r) Reconnect to the server. Optional arguments are db and host 
edit (e) Edit command with $EDITOR 
exit () Exit mysql. Same as quit 
go (g) Send command to mysql server 
ego (G) Send command to mysql server; Display result verically 
print (p) print current command 
quit (q) Quit mysql 
rehash (#) Rebuild completion hash 
status (s) Get status information from the server 
use (u) Use another database. Takes database name as argument 

Connection id: 268 (Can be used with mysqladmin kill) 
mysql> 


이 명령들은 지금 당장 필요 없을지도 모른다.

그러나 그 명령어들의 의미를 정확히 알기 위해서 한번씩 테스트해 보는 것이 좋을 것이다.

status, use, print, connect, clear, 그리고 quit와 같은 명령어들은 매우 유용하게 사용될 것이다. 

여러분은 지금 서버에 연결해서 데이타베이스를 선택하고 기본적인 명령어를 수행하는 방법 에 대해 기본적으로 이해해야 한다.

다음 장에서는 데이타베이스를 조작하기 위해 필요한 개념과 기술을 다룰 것이다. 




● Part 2: 데이타베이스와 테이블(Datatypes and Tables) 
======================================================================================================

데이타베이스는 좀 더 복잡한 데이타 구조의 계층에 지나지 않는다.

MySQL에서는 정보의묶음(또는 레코드)을 테이블이라 부른다.

이러한 레코드들은 데이타 타입이라고 알려진, 사용자에 의해 조작될 수 있는 아주 작은 크기의 개체들로 구성된다.

이러한 데이타타입들은 하나 또는 그 이상이 모여 레코드를 구 성하며,

데이타베이스의 부분을 이루는 테이블은 레코드의 집합으로 구성된다.

우리는 다음과 같이 데이타베이스의 계층을 생각 할 수 있다. 

------------------------------------ 
Database < Table < Record < Datatype 
------------------------------------ 

데이타 타입은 사용자가 어떠한 프로젝트를 수행하기 위해 가장 적합한 테이블을 만들 때 여러 가지의 형식과 크기로 나타낼 수 있다.

적절한 데이타 타입을 선택하고 결정하는 것은 데이타베이스의 실행에 큰 영향을 주므로 이 개념에 대해 자세히 이해해야 한다. 


2.1 MySQL 데이타 타입

MySQL은 경험이 없는 사용자라 할 지라도 한번씩은 많은 종류의 데이타 타입들을 접해 본 적이 있을 것이며, 또 쉽게 사용할 수 있다.

가장 일반적으로 사용되는 데이타 타입은 다음과 같다. 

⊙ CHAR (M) 

CHAR 데이타 타입은 고정된 길이의 문자열을 나타내는데 사용된다.
하나의 CHAR 문자열은 1-255 자 범위의 문자를 저장할 수 있다.

------------------------------------ 
ex. 
car_model CHAR(10); 
------------------------------------ 

⊙ VARCHAR (M) 

VARCHAR 데이타 타입은 가변적인 길이의 문자열을 저장하므로 CHAR 보다는 좀더 융통성 있는 데이타 타입이다. 
VARCHAR 문자열은 1-255 자 범위의 문자를 저장할 수 있다.
(CHAR 는 포함된 데이타의 크기에는 관계없이 이미 지정된 가변적인 전체의 길이를 저장하 는 반면에

VARCHAR 는 오직 들어가는 데이타의 양만을 저장하므로 데이타베이스 파일의 크 기를 줄 일수 있다.) 

------------------------------------ 
ex. 
car_model VARCHAR(10); 
------------------------------------ 

⊙ INT (M) [Unsigned]

INT 데이타타입은 -2147483648 에서 2147483647 사이의 정수를 저장한다. 
"unsigned" 옵션과 함께 0부터 4294967295 범위의 정수를 나타낼 수도 있다. 

----------------------------------------------------------- 
ex. 
light_years INT; 
Valid integer: '-24567'. Invalid integer: '3000000000'. 
----------------------------------------------------------- 
ex. 
light_years INT unsigned; 
Valid integer: '3000000000'. Invalid integer: '-24567'. 
----------------------------------------------------------- 

⊙ FLOAT [(M,D)]

FLOAT는 다소 정확한 숫자의 표시가 필요할 때 사용되어지며, 작은 양의 소수점 숫자를 나타낸다. 

------------------------------------ 
ex. 
rainfall FLOAT (4,2); 
------------------------------------ 
이것은 소수점 값이 될 수 있는 일년간 평균강수량을 나타낼 수 있다.

좀 더 명확하게 말하면 FLOAT (4,2) 는 4개의 저장할 수 있는 최대 자리 수와 2개의 소수점 이하의 자리 수 를 가리킨다.

42.35 은 올바른 값이다.
324.45 은 틀린 값이다. 324.5로 해야 맞다. 
2.2 은 올바른 값이다. 
34.542 은 틀린 값이다. 34.54로 해야 맞다. 

주의) FLOAT 는 어림잡은 수이기 때문에 MySQL 내에 포함 된 정수의 값이 아닌 데이타 타입으로 돈의 값을 나타낼 때에는

DECIMAL을 사용하는 것이 더 현명한 방법이다. 더욱 자세한 설명을 원하면 매뉴얼을 참고하기 바란다. 


⊙ DATE 

날짜와 관련된 정보를 저장한다. 디폴트 형식은 'YYYY-MM-DD' 이며, '0000-00-00' 에서 '9999-12-31'까지의 범위를 갖는다.

MySQL은 이 기사에서는 다루어지기 너무 방대한 막강한 날짜형식의 조절과 조작 명령어를 제공한다.

MySQL 매뉴얼에 이 기능에 대해서 자세하게 다루어져 있으므로 참고하기 바란다. 
------------------------------------ 
ex. 
the_date DATE; 
------------------------------------ 

⊙ TEXT / BLOB 

text 와 blob 데이타 타입은 255 - 65535 자의 문자열을 저장할 때 사용된다.

이것은 여러분이 읽은 기사와 같은 것을 저장하기에 유용하다. 그러나 VARCHAR 와 CHAR처럼 딱 잘라 비교할 수는 없다.

단지 BLOB 와 TEXT 사이에 차이점이 있다면 BLOB은 변하기 쉬운 경우에 비유할 수 있고,

TEXT는 영향을 받지 않는 무감각한 경우에 비유할 수 있다. 


⊙ SET

지정된 값으로부터 어떤 주어진 값을 선택하는, 정해진 문자열의 데이타 타입으로 그것은 하나의 값이 될 수도 있고

여러개의 값을 가질 수도 있다. 64개의 값까지 지정할 수 있다. 
------------------------------------------- 
ex. 
transport SET ("truck", "wagon") NOT NULL; 
------------------------------------------- 

위의 예로부터 수송기관(transport)은 다음의 값들을 가질 수 있다. 

------------------------------------ 
"" 
"truck" 
"wagon" 
"truck","wagon" 
------------------------------------ 

⊙ ENUM 

SET 데이타 타입과 비슷한 특징을 갖는 정해진 문자열의 데이타 타입이지만 선택할 수 있는 값이 하나로만 정해져 있다는 점이 다르다.

한 공간의 바이트만을 가지므로 테이블내의 시간과 공간을 절약할 수 있다. 

------------------------------------------- 
ex. 
transport ENUM ("truck", "wagon") NOT NULL; 
------------------------------------------- 
위의 예로부터 수송기관(transport)은 다음의 값들을 가질 수 있다. 

------------------------------------ 
NULL 
"truck" 
"wagon" 
"truck" 
------------------------------------ 


2.2 레코드

데이타들은 관련된 것들끼리 묶여서 디스크에 저장되는데 이러한 데이타의 묶음을 레코드라 고 한다.

레코드는 데이타저장의 기본단위이며, 하나의 레코드는 서로 다른 형태의 값(데이타타입)을 가질 수있다.

아래에 나열된 이름, 주소, 전화번호는 각각 세개의 부분으로 구성된 레코드로 저장할 수 있으며

이러한 레코드는 데이타가 저장되는 기본단위로서 하나의 테이블을 구성한다. 

이름 | 주소 | 전화번호 
--------|-------|--------- 
원주희 | 한국 | 007-0000 
홍길동 | 북한 | 008-0909 



2.3 테이블(The Bigger Picture: Tables)
-------------------------------------- 

우리는 데이타베이스 상에서 어떠한 명령어들을 수행하기 전에, 먼저 데이타가 저장될 수 있는 테이블을 만들어야 한다.

이것은 다음과 같은 방법으로 만들어진다. 

------------------------------------ 
mysql> CREATE TABLE test ( 
> name VARCHAR (15), 
> email VARCHAR (25), 
> phone_number INT, 
> ID INT NOT NULL AUTO_INCREMENT, 
> PRIMARY KEY (ID)); 
------------------------------------ 
테이블이 성공적으로 만들어지면 다음과 같은 화면이 출력될 것이다. 

------------------------------------ 
Query OK, 0 rows affected (0.10 sec) 
mysql> 
------------------------------------ 

여러분의 데이타베이스에 첫 번째 테이블이 생성되었다. 
주의(1) : 서로 다른 두 개의 테이블은 같은 이름을 가질 수 없다. 
주의(2) : 각각의 데이타공간은 종종 컬럼(column)이라는 개체의 속성으로 나타낸다. 

컬럼(Column)의 특징 : 
------------------------------------ 
하나의 이름이 숫자로만 구성될 수 없다. 
하나의 이름은 숫자로 시작할 수 있다. 
하나의 이름은 64자까지 가능하다. 
------------------------------------ 

 


2.3.1 테이블의 다른 옵션들 : 

나중에 다른 특징들과 성능이 데이타 타입에 추가될지라도 다음의 옵션들은 계속 존재할 것이다. 

기본 키(Primary Key) : 
===================== 
다른 속성들로부터 하나의 레코드를 유일하게 식별하는데 사용되어지며, 두 개의 레코드는 
똑같은 기본 키를 가질 수 없다. 이것은 두개의 레코드가 중복되어지는 실수를 없애려 
고 할 때 아주 적합하게 사용된다. 

Auto_Increment : 
================ 
이 함수(function)를 가진 컬럼(column)은 레코드에 삽입될 때 자동적으로 한 개씩 값이 
(previous + 1) 증가한다. data가 'NULL'값 일 때도 컬럼(column)에 자동적으로 한 개씩 
값이 증가하여 삽입된다. 

NOT NULL : 
========== 
NULL값(값이 없는)을 절대로 허용하지 않는 컬럼(column)을 의미한다. 

------------------------------------ 
ex. 
soc_sec_number INT PRIMARY KEY; 
------------------------------------ 
두 개의 soc_sec_number 레코드는 같은 값을 가질 수 없다. 

------------------------------------ 
ex. 
ID_NUMBER INT AUTO_INCREMENT; 
------------------------------------ 
1 에서 시작한 ID_NUMBER 값은 다음 값이 입력될 때마다 자동적으로 1씩 증가한다. 


2.3.2 테이블과 관련된 명령어들 

우리는 다음과 같이 테이블에 관련된 많은 유용한 명령어들을 실행할 수 있다. 


⊙ Show Tables 
============== 
------------------------------------ 
mysql> show tables; 
------------------------------------ 
결과 : 데이타베이스에 현재 존재하고 있는 모든 테이블들을 나열한다. 

⊙ Show Columns 
=============== 
------------------------------------ 
mysql> show columns from test; 
------------------------------------ 
결과 : 지정된 테이블과 관련된 컬럼과 컬럼의 정보를 보여줄 것입니다. 

테스트용 테이블을 생성한 후에 위의 명령어들을 한번씩 실행해보기 바란다. 
복잡 다양한 데이타베이스의 이해에 매우 도움이 될 것이다. 


여러분은 이제 MySQL 서버의 가장 중요한 개념인, 테이블을 생성하는 기본적인 과정을 이해했다.

또한 테이블은 서로다른 형태의 데이타타입으로 이루어진 레코드가 모여 구성된다는 것도 알았다.

다음 장에서는 데이타베이스를 조작하는 방법에 대해 설명할 것이다. 


● Part 3: 데이타베이스 다루기(Manipulating the Database)
======================================================== 

데이타베이스는 다음의 4가지의 방법으로 조작할 수 있다. : addition, deletion, 
modification, 과 search : 이에 대해서는 다음 장에서 자세히 설명할 것이다.

많은 컴퓨터 언어들처럼 SQL 역시 조금은 특별한 명령어 구문을 가지고 있다.

괄호(()), 콤 마(,), 또는 세미클론(;)의 위치가 조금만 잘못되어도 에러가 발생하므로 주의해서 입력해야 한다. 


3.1 레코드 입력하기(Insertion of records) 


전에 설명한 test라는 테이블 만드는 방법을 다시 한번 살펴보자. 

------------------------------------ 
mysql> CREATE TABLE test ( 
> name VARCHAR (15), 
> email VARCHAR (25), 
> phone_number INT, 
> ID INT NOT NULL AUTO_INCREMENT, 
> PRIMARY KEY (ID)); 
------------------------------------ 


이미 만들어진 테이블에 데이타를 입력하기 위해서는 INSERT 문을 사용한다. 

------------------------------------ 
mysql> INSERT INTO test VALUES 
mysql> ('Bugs Bunny', 'carrots@devshed.com', 
mysql> 5554321, NULL); 
------------------------------------ 
성공적으로 입력이 되면 다음과 같은 메시지가 나온다. 
--------------------------------------------------- 
Result, assuming the command was correctly entered: 

Query OK, 1 row affected (0.02 sec) 
mysql> 
--------------------------------------------------- 

· VARCHAR 데이타타입은 단일인용문으로 둘러싸여 있다.

모든 문자열 타입의 데이타 타입은(char, varchar, text, blob 등)단일 인용문으로 둘러싸여야 하며 그렇지 않으면 에러가 발생한다. 
· phone number와 같은 INT 타입의 데이타타입은 단일인용문이 필요하지 않다. 
· NULL은 아직정해지지않은 값으로 값이 없을 수도 있지만 NOT NULL은 반드시 값을 입력 해야한다.

 

AUTO_INCREMENT와 사용된 레코드는 값이 NULL이면 1을 할당하고, 값이 있으면 이전값에 +1씩 자동적으로 부여한다. 

한가지 주의해야 할점은 데이타를 입력할때 반드시 레코드의 갯수만큼의 데이타를 입력해야한다.

위의 예에서는 4개의 값을 입력해야 하는데 한개의 값만 입력할 경우 다음과 같은 에러가 발생한다. 
-------------------------------------------------- 
Ex. 
mysql> insert into test values('doggy'); 
ERROR 1058: Column count doesn't match value count 
mysql> 
-------------------------------------------------- 

MySQL의 가장 큰 장점중의 하나는 데이타타입을 자유롭게 변경할 수 있다는 것이다. 


3.2 테이블정보 검색하기(Selection) 

데이타를 검색하기 위해 SELECT문을 사용한다. 
------------------------------------ 
mysql> SELECT * FROM test 
mysql> WHERE (name = "Bugs Bunny"); 
------------------------------------ 
결과: 
+------------+--------------------+--------------+----+ 
| name | email | phone_number | ID | 
+------------+--------------------+--------------+----+ 
| Bugs Bunny | carrot@devshed.com | 5554321 | 1 | 
+------------+--------------------+--------------+----+ 

같은 이름이지만 서로 다른 email와 phone number를 가진 데이타를 입력해보자. 

+------------+---------------------+--------------+----+ 
| name | email | phone_number | ID | 
+------------+---------------------+--------------+----+ 
| Bugs Bunny | carrot@devshed.com | 5554321 | 1 | 
| Bugs Bunny | pepper@devshed.com | 5554331 | 2 | 
| Bugs Bunny | celery@devshed.com | 5554351 | 4 | 
| Bugs Bunny | lettuce@devshed.com | 5554341 | 3 | 
+------------+---------------------+--------------+----+ 


3.3 삭제하기(Deletion) 

테이블에 있는 한개 이상의 레코드를 삭제하기 위해 사용한다. 
DELETE문으로 수행된다. 
------------------------------------ 
mysql> DELETE FROM test 
mysql> WHERE (name = "Bugs Bunny"); 
------------------------------------ 
결과 : 이름이 Bugs Bunny인 레코드를 도두 삭제하므로 테이블에는 데이타가 하나도 없다. 

------------------------------------ 
mysql> DELETE FROM test 
mysql> WHERE (phone_number = 5554321); 
------------------------------------ 
결과 : phone_number 가 5554321인 레코드를 삭제한다. 
+------------+---------------------+--------------+----+ 
| name | email | phone_number | ID | 
+------------+---------------------+--------------+----+ 
| Bugs Bunny | pepper@devshed.com | 5554331 | 2 | 
| Bugs Bunny | celery@devshed.com | 5554351 | 4 | 
| Bugs Bunny | lettuce@devshed.com | 5554341 | 3 | 
+------------+---------------------+--------------+----+ 


3.4 데이타 변경하기(Modification) 

테이블에 이미 입력된 자료를 변경하기 위해 사용되며 UPDATE 문을 사용한다. 
------------------------------------------ 
mysql> UPDATE test SET name = 'Daffy Duck' 
mysql> WHERE name = "Bugs Bunny"; 
------------------------------------------ 

+------------+---------------------+--------------+----+ 
| name | email | phone_number | ID | 
+------------+---------------------+--------------+----+ 
| Daffy Duck | pepper@devshed.com | 5554331 | 2 | 
| Daffy Duck | celery@devshed.com | 5554351 | 4 | 
| Daffy Duck | lettuce@devshed.com | 5554341 | 3 | 
+------------+---------------------+--------------+----+ 

 


● Part 4: 고급 MySQL명령어(Advanced MySQL Commands) ==================================================== 

우리는 이제 MySQL에 대해 기본적인 개념과 명령어들에 대해 배웠다.

이번장에서는 좀더 진보된 명령어에 대해 배워보기로 하겠다. 


4.1 논리 연산자(Logical Operations) 

MySQL은 모든 기본적인 논리연산자를 지원한다. 

⊙ AND (&&) 
------------------------------------ 
mysql> SELECT * FROM test WHERE 
mysql> (name = "Bugs Bunny") AND 
mysql> (phone_number = 5554321); 
------------------------------------ 
결과 : 이름이 "Bugs Bunny"이고 전화번호가 '5554321'인 레코드가 출력될것이다. 

⊙ OR ( || ) 
------------------------------------ 
mysql> SELECT * FROM test WHERE 
mysql> (name = "Bugs Bunny") OR 
mysql> (phone_number = 5554321); 
------------------------------------ 
결과 : 이름이 "Bugs Bunny"이거나 전화번호가 '5554321'인 레코드가 모두 출력된다. 

⊙ NOT ( ! ) 
------------------------------------ 
mysql> SELECT * FROM test WHERE 
mysql> (name != "Bugs Bunny"); 
------------------------------------ 
결과 : 이름이 "Bugs Bunny"이 아닌 레코드만 출력된다. 

⊙ Order By 
------------------------------------ 
mysql> SELECT * FROM test WHERE 
mysql> (name = "Bugs Bunny") ORDER BY 
mysql> phone_number; 
------------------------------------ 
결과 : 이름이 "Bugs Bunny"인 모든 레코드가 phone_number를 기준으로 정렬될것이다. 


4.2 Search functions 

MySQL 은 일반문자뿐만아니라 특수문자를 포함해 데이타를 검색할 수 있다.

찾고자하는 값을 정확히 모를때 Like연산자를 사용해 문자형태가 같은 열을 검색한다. 

------------------------------------ 
mysql> SELECT * FROM test WHERE 
mysql> (name LIKE "%gs Bunny"); 
------------------------------------ 
결과 : 
· "gs Bunny"를 포함하는 모든 레코드가 출력될 것이다. 
("Bugs Bunny", "ags Bunny", "gs Bunny", 와 "234rtgs Bunny"등과 같은 이름) 

· "LIKE"가 equals sign(=)대신 사용된것에 주목하자. "LIKE"는 정확한 값을 모르는 데이타를 검색할때 사용된다. 

· '%'는 임의의 문자(0개~임의의 개수)를 의미하며, '_'는 한문자를 의미한다.

------------------------------------ 
mysql> SELECT * FROM test WHERE 
mysql> (name LIKE "Bugs Bunny%"); 
------------------------------------ 
결과 : "Bugs Bunny"를 포함하는 문자가 출력될 것이다. 
("Bugs Bunnys", "Bugs Bunnyyyy453", "Bugs Bunnytrtr"등과 같은 이름, 그러나 "gs Bunny"는 아니다.) 


4.3 주어진 조건에 맞는 특정한 열만 검색하기
(Focused Search Results) 
------------------------------------ 
mysql> SELECT name FROM test WHERE 
mysql> (name = "Bugs Bunny"); 
------------------------------------ 
결과 : 
+------------+ 
| name | 
+------------+ 
| Bugs Bunny | 
+------------+ 


4.4 테이블 변경하기(Alter table)

MySQL의 가장 중요한 기능중의 하나가 이미 만들어진 테이블을 변경하는 것입니다. 
ALTER 문을 사용하며 다음과 같은 것을 수행할 수 있습니다. 
· 새로운 열 추가하기 
· 열의 속성 바꾸기 
· 열 삭제하기 
· 테이블 이름 바꾸기 

Example: 테이블 이름 변경하기(Rename the table) 
-------------------------------------------- 
mysql> ALTER table test RENAME mytest; 
-------------------------------------------- 

Example: 새로운 열 추가하기(Add a column)
-------------------------------------------- 
mysql> ALTER table mytest ADD birthday DATE; 
-------------------------------------------- 

Example: 열의 속성변경하기(Modify a column)
-------------------------------------------- 
mysql> ALTER table mytest CHANGE 
mysql> name newname VARCHAR (25); 
-------------------------------------------- 

Example: 열 삭제하기(Delete a column) 
-------------------------------------------- 
mysql> ALTER table mytest DROP newname; 
-------------------------------------------- 

MySQL 에서 ALTER 사용시 컬럼 위치 지정하기 
------------------------------------------------

MySQL 에서 ALTER 명령을 이용해 테이블의 스키마를 변경할 때 컬럼 위치를 지정 할 수 있습니다.
아래 예는 email 이라는 컬럼 뒤에 attachment 라는 컬럼을 추가하는 SQL 문입니다. 
> alter table {TABLE_NAME} add attachment char(64) DEFAULT '' NOT NULL AFTER email; 

 

이제 아래에 주어진 테이블을 만들어 보고 테이블을 변경해 보자. 


mysql> TABLE mytest ( 
> email VARCHAR (25), 
> phone_number INT, 
> ID INT AUTO_INCREMENT, 
> birthday DATE );


 

반응형