우선은 유용한 주소하나 알려드릴께요
http://database.sarang.net
혹은 http://database.sarang.net/?criteria=mysql
http://database.sarang.net/database/database.phtml
위의 주소에서 퍼온 글입니다.
MySql 기본 사용법
리눅스에서 직접 로그인 또는 텔넷으로 로그인 한 후 다음과 같은 명령들을 이용하여 MySql을 실습해 볼 수 있습니다.
1. 해당 디렉토리 찾아가기
$ cd /
$ cd usr/local/mysql
2. mysql 처음 사용시 해야할 것
mysql의 root사용자의 패스워드를 다음과 같이 설정하고 mysql를 재기동하도록 합니다.
$ mysql -u root
mysql> use mysql;
mysql> show databases;
mysql> show tables;
(여기서 db, user 테이블을 주목해 두어야 함.)
mysql> select * from db;
mysql> select * from user;
mysql> update user set password=password('******') where user='root';
mysql>q;
$ mysqladmin -u root reload
3. mysql 재기동
$ mysqladmin -uroot -p reload
Enter password : ******
위의 패스워드는 MySql에서 사용하는 패스워드입니다.
4. 데이터베이스의 생성
$ mysqladmin -uroot -p create db명
Enter password : ******
5. 데이터베이스의 삭제
$ mysqladmin -uroot -p drop db명
Enter password : ******
6. 특정 db 사용자 권한 설정 및 새로운 사용자 등록
$ mysql -u root -p
Enter password : ******
mysql> use mysql;
mysql> insert into db values ('%','db명', '사용자ID', 'y','y','y','y','y','y','y','y','y','y');
mysql> select host, db, user from db;
mysql> insert into user (host, user, password) values ('localhost', '사용자ID', password('패스워드'));
mysql> select host, user, password from user;
mysql> q
※ 지금부터는 linux3s1 사용자(패스워드는 111111으로 가정)가 linux3 데이터베이스를 사용한다는 조건하에서 예시를 들어 설명합니다.
7. mysql 의 실행
$ mysql -u linux3s1 -p
Enter password : ******
8. 어떠한 데이터베이스가 있는지 확인
mysql> show databases;
9. 사용할 데이터베이스를 선택
mysql> use linux3s;
10. 특정 데이터베이스안에 어떠한 테이블들이 있는지 확인
mysql> show tables;
11. table 생성/수정/삭제
⑴ linux3s 데이터베이스에 imsi 테이블을 CREATE TABLE을 이용하여 생성한다.
mysql> create table imsi(
-> name CHAR(8),
-> id VARCHAR(10) NOT NULL,
-> url VARCHAR(40),
-> email VARCHAR(40),
-> milage INT(11),
-> level CHAR(2),
-> PRIMARY KEY(id) );
⑵ desc 명령으로 imsi 테이블의 구조 명세를 살펴보자.
mysql> desc imsi;
⑶ 테이블 내용을 수정하려면 ALTER TABLE 문을 이용한다.
mysql> alter table imsi change column id id varchar(12) NOT NULL;
mysql> desc imsi;
⑷ imsi 테이블을 삭제하려면 DROP TABLE문을 사용한다.
mysql> drop table imsi;
mysql> show tables;
⑸ mysql client를 이용하지 않고 데이터베이스내에 테이블을 생성하는 방법
아래의 SQL문을 imsi.sql이라는 파일로 저장한다.
create table imsi(
name CHAR(8),
id VARCHAR(10) NOT NULL,
url VARCHAR(40),
email VARCHAR(40),
milage INT(11),
level CHAR(2),
PRIMARY KEY(id) );
이제 계정의 커맨드 라인에서 아래와 같은 명령을 내리면 mysql client를 통해 linux3s 데이터베이스에 연결하지 않고도 데이터베이스내에 imsi 테이블을 생성.
아래의 명령은 linux3s1라는 사용자로 linux3s 데이터베이스에 연결하여 imsi.sql 파일에 담긴 sql문을 실행한다는 의미이다.
$ mysql -u linux3s1 -p linux3s < imsi.sql
Enter password : 111111
12. INSERT 명령문으로 5개의 데이터를 imsi 테이블에 삽입해 보자.
mysql> insert into imsi (name, id, url, email, milage, level)
-> values ('이상군', 'server', '815server.net', 'master@815server.net', '1000', 'A');
mysql> insert into imsi (name, id, url, email, milage, level)
-> values ('김재현', 'regist', 'dosa.com', 'master@dosa.com', '1500', 'B');
mysql> insert into imsi (name, id, url, email, milage, level)
-> values ('마준석', 'you', 'youiwe.co.kr', 'master@youiwe.co.kr', '2000', 'C');
mysql> insert into imsi (name, id, url, email, milage, level)
-> values ('김대수', 'iwe', 'youiwe.co.kr', 'master@youiwe.co.kr', '1500', 'B');
mysql> insert into imsi (name, id, url, email, milage, level)
-> values ('한용수', 'yshan', 'hanserver.com', 'master@hanserver.com', '2500', 'E');
13. SELECT 문으로 확인해 보자.
mysql> select * from imsi;
14. SELECT 문으로 level이 B인 사용자의 이름과 아이디를 출력해 보자.
mysql> select name, id from imsi where level='B';
15. DISTINCT 옵션을 이용하여 imsi 테이블에 총 몇 종류의 사용자 level이 존재하는지 알아보자.
mysql> select distinct (level) from imsi;
16. WHERE 문을 이용하여 milage가 1500 이상이면서 level이 'B'인 사람의 이름과 아이디, url을 출력해 보자
mysql> select name, id, url from imsi where milage>1500 AND level='B';
17. ORDER BY문을 이용하여 검색 결과를 정렬하여 보자
milage가 2000 이상인 사람의 이름과 아이디, milage를 milage가 높은 순서대로 출력
mysql> select name, id, milage from imsi where milage > 2000 order by milage DESC;
18. 문자열을 포함하여 검색
mysql> select name, '님의 milage는 ', milage, '점입니다.' from imsi?? where milage >= 2000 order by milage;
19. 산술식을 이용하여 출력
mysql> select name, id, email, milage+200 from imsi where id='yshan';
20. 그룹함수를 이용
그룹함수를 이용하면 필드 값의 평균이나 최대, 최소, 또는 해당 조건을 만족하는 레코드가 몇 개 인지 알 수 있으므로 수치를 값으로 갖는 필드에 대한 통계치를 구할 때 유용하다.
count(필드명) //조건을 만족하는 레코드의 개수
sum(필드명) //해당 필드의 합
min(필드명) //해당 필드의 값 중 최소값
max(필드명) //해당 필드의 값 중 최대값
avg(필드명) //해당 필드의 평균값
mysql> select count(*) from imsi where level='B';
mysql> select count(*) from imsi where name like '%박%';
'박%';
'전_';
'전__';
where date between '2001-07-10' and '2001-08-30';
21. 자료의 갱신
mysql> update imsi set name='전세정' where name='마준석';
22. 특정 레코드의 삭제
mysql> delete from imsi where name='전세정';
백업과 복구
· 데이터베이스의 백업(backup)과 복구(restore)는 매우 중요하다.
MySQL에서는 mysqldump라는 파일을 실행하여 데이터베이스내의 데이터를 외부 파일로 저장할 수 있다. mysqldump는 mysql 디렉토리 밑의 bin 디렉토리에 존재하며 아래와 같은 명령어를 통해 백업을 수행한다.
mysqldump -u [user_name] -p [백업할 db_name] > [외부로 저장할 파일명]
23. linux3s? 데이터베이스를 백업해 보자.
$ mysqldump -u linux3s1 -p linux3s > linux3s_backup.sql
Enter password : ******
24. 백업된 파일의 확인
$ ls -l linux3s_backup.sql
25. 위 명령의 실행 결과 생성된 linux3s_backup.sql 파일의 내용을 확인한다.
$ cat linux3s_backup.sql
mysqldump 명령으로 백업된 데이터베이스는 해당 데이터베이스내에 있는 테이블의 구조를 정의한 데이터 정의문과 INSERT 문과 같은 데이터 조작문의 SQL 형태로 저장되어 있다.
이렇게 SQL 형태로 자장되면 아래와 같은 명령으로 쉽게 데이터를 복구할 수 있다. 또한 SQL은 데이터베이스의 표준언어이므로 MySQL이 아닌 다른 database server에 해당 database를 이식하려 할 때에도 호환성에 의한 문제가 거의 발생치 않는 장점이 있다.
26. 필요에 따라 linux3s_backup.sql 파일의 내용을 수정한 후 다음과 같은 방법으로 복구한다.
$ mysql -u linux3s1 -p linux3s < linux3s_backup.sql
Enter password : ******
※ 컬럼의 유형
○ 컬럼(Column)
- 데이터베이스를 구성하는 최소단위
- 컬럼들이 모여서 테이블(Table)을 구성
○ 컬럼의 유형
TINYINT
·부호 있는 정수 -128 ∼ 127
·부호 없는 정수 0 ∼ 255
·1 Byte
SMALLINT
·부호 있는 정수 -32768 ∼ 32767
·부호 없는 정수 0 ∼ 65535
·2 Byte
MEDIUMINT
·부호 있는 정수 -8388608 ∼ 8388607
·부호 없는 정수 0 ∼ 16777215
·3 Byte
INT 또는
INTEGER
·부호 있는 정수 -2147483648 ∼ 2147483647
·부호 없는 정수 0 ∼ 4294967295
·4 Byte
BIGINT
·부호 있는 정수 -9223372036854775808 ∼ -9223372036854775807
·부호 없는 정수 0 ∼ 18446744073709551615
·8 Byte
FLOAT
·단일 정밀도를 가진 부동 소수점
·-3.402823466E+38 ∼ 3.402823466E+38
DOUBLE
·2 배 정밀도를 가진 부동 소수점
·-1.79769313486231517E+308 ∼ 1.79769313486231517E+308
DATE
·날짜를 표현하는 유형
·1000-01-01 ∼ 9999-12-31
DATETIME
·날짜와 시간을 표현하는 유형
·1000-01-01 00:00:00 ∼ 9999-12-31 23:59:59
TIMESTAMP
·1970-01-01 00:00:00부터 2037년 까지 표현
·4 Byte
TIME
·시간을 표현하는 유형
·-839:59:59 ∼ 833:59:59
YEAR
·년도를 표현하는 유형
·1901년 ∼ 2155년
CHAR(M)
·고정길이 문자열을 표현하는 유형
·M = 1 ∼ 255
VARCHAR(M)
·가변길이 문자열을 표현하는 유형
·M = 1 ∼ 255
TINYBLOB
TINYTRXT
·255개의 문자를 저장
·BLOB : Binary Large Object의 약자
BLOB
TEXT
·63535개의 문자를 저장
MEDIUMBLOB
MEDIUMTEXT
·16777215개의 문자를 저장
LONGBLOB
LONGTEXT
·4294967295(4Giga)개의 문자를 저장
http://database.sarang.net
혹은 http://database.sarang.net/?criteria=mysql
http://database.sarang.net/database/database.phtml
위의 주소에서 퍼온 글입니다.
MySql 기본 사용법
리눅스에서 직접 로그인 또는 텔넷으로 로그인 한 후 다음과 같은 명령들을 이용하여 MySql을 실습해 볼 수 있습니다.
1. 해당 디렉토리 찾아가기
$ cd /
$ cd usr/local/mysql
2. mysql 처음 사용시 해야할 것
mysql의 root사용자의 패스워드를 다음과 같이 설정하고 mysql를 재기동하도록 합니다.
$ mysql -u root
mysql> use mysql;
mysql> show databases;
mysql> show tables;
(여기서 db, user 테이블을 주목해 두어야 함.)
mysql> select * from db;
mysql> select * from user;
mysql> update user set password=password('******') where user='root';
mysql>q;
$ mysqladmin -u root reload
3. mysql 재기동
$ mysqladmin -uroot -p reload
Enter password : ******
위의 패스워드는 MySql에서 사용하는 패스워드입니다.
4. 데이터베이스의 생성
$ mysqladmin -uroot -p create db명
Enter password : ******
5. 데이터베이스의 삭제
$ mysqladmin -uroot -p drop db명
Enter password : ******
6. 특정 db 사용자 권한 설정 및 새로운 사용자 등록
$ mysql -u root -p
Enter password : ******
mysql> use mysql;
mysql> insert into db values ('%','db명', '사용자ID', 'y','y','y','y','y','y','y','y','y','y');
mysql> select host, db, user from db;
mysql> insert into user (host, user, password) values ('localhost', '사용자ID', password('패스워드'));
mysql> select host, user, password from user;
mysql> q
※ 지금부터는 linux3s1 사용자(패스워드는 111111으로 가정)가 linux3 데이터베이스를 사용한다는 조건하에서 예시를 들어 설명합니다.
7. mysql 의 실행
$ mysql -u linux3s1 -p
Enter password : ******
8. 어떠한 데이터베이스가 있는지 확인
mysql> show databases;
9. 사용할 데이터베이스를 선택
mysql> use linux3s;
10. 특정 데이터베이스안에 어떠한 테이블들이 있는지 확인
mysql> show tables;
11. table 생성/수정/삭제
⑴ linux3s 데이터베이스에 imsi 테이블을 CREATE TABLE을 이용하여 생성한다.
mysql> create table imsi(
-> name CHAR(8),
-> id VARCHAR(10) NOT NULL,
-> url VARCHAR(40),
-> email VARCHAR(40),
-> milage INT(11),
-> level CHAR(2),
-> PRIMARY KEY(id) );
⑵ desc 명령으로 imsi 테이블의 구조 명세를 살펴보자.
mysql> desc imsi;
⑶ 테이블 내용을 수정하려면 ALTER TABLE 문을 이용한다.
mysql> alter table imsi change column id id varchar(12) NOT NULL;
mysql> desc imsi;
⑷ imsi 테이블을 삭제하려면 DROP TABLE문을 사용한다.
mysql> drop table imsi;
mysql> show tables;
⑸ mysql client를 이용하지 않고 데이터베이스내에 테이블을 생성하는 방법
아래의 SQL문을 imsi.sql이라는 파일로 저장한다.
create table imsi(
name CHAR(8),
id VARCHAR(10) NOT NULL,
url VARCHAR(40),
email VARCHAR(40),
milage INT(11),
level CHAR(2),
PRIMARY KEY(id) );
이제 계정의 커맨드 라인에서 아래와 같은 명령을 내리면 mysql client를 통해 linux3s 데이터베이스에 연결하지 않고도 데이터베이스내에 imsi 테이블을 생성.
아래의 명령은 linux3s1라는 사용자로 linux3s 데이터베이스에 연결하여 imsi.sql 파일에 담긴 sql문을 실행한다는 의미이다.
$ mysql -u linux3s1 -p linux3s < imsi.sql
Enter password : 111111
12. INSERT 명령문으로 5개의 데이터를 imsi 테이블에 삽입해 보자.
mysql> insert into imsi (name, id, url, email, milage, level)
-> values ('이상군', 'server', '815server.net', 'master@815server.net', '1000', 'A');
mysql> insert into imsi (name, id, url, email, milage, level)
-> values ('김재현', 'regist', 'dosa.com', 'master@dosa.com', '1500', 'B');
mysql> insert into imsi (name, id, url, email, milage, level)
-> values ('마준석', 'you', 'youiwe.co.kr', 'master@youiwe.co.kr', '2000', 'C');
mysql> insert into imsi (name, id, url, email, milage, level)
-> values ('김대수', 'iwe', 'youiwe.co.kr', 'master@youiwe.co.kr', '1500', 'B');
mysql> insert into imsi (name, id, url, email, milage, level)
-> values ('한용수', 'yshan', 'hanserver.com', 'master@hanserver.com', '2500', 'E');
13. SELECT 문으로 확인해 보자.
mysql> select * from imsi;
14. SELECT 문으로 level이 B인 사용자의 이름과 아이디를 출력해 보자.
mysql> select name, id from imsi where level='B';
15. DISTINCT 옵션을 이용하여 imsi 테이블에 총 몇 종류의 사용자 level이 존재하는지 알아보자.
mysql> select distinct (level) from imsi;
16. WHERE 문을 이용하여 milage가 1500 이상이면서 level이 'B'인 사람의 이름과 아이디, url을 출력해 보자
mysql> select name, id, url from imsi where milage>1500 AND level='B';
17. ORDER BY문을 이용하여 검색 결과를 정렬하여 보자
milage가 2000 이상인 사람의 이름과 아이디, milage를 milage가 높은 순서대로 출력
mysql> select name, id, milage from imsi where milage > 2000 order by milage DESC;
18. 문자열을 포함하여 검색
mysql> select name, '님의 milage는 ', milage, '점입니다.' from imsi?? where milage >= 2000 order by milage;
19. 산술식을 이용하여 출력
mysql> select name, id, email, milage+200 from imsi where id='yshan';
20. 그룹함수를 이용
그룹함수를 이용하면 필드 값의 평균이나 최대, 최소, 또는 해당 조건을 만족하는 레코드가 몇 개 인지 알 수 있으므로 수치를 값으로 갖는 필드에 대한 통계치를 구할 때 유용하다.
count(필드명) //조건을 만족하는 레코드의 개수
sum(필드명) //해당 필드의 합
min(필드명) //해당 필드의 값 중 최소값
max(필드명) //해당 필드의 값 중 최대값
avg(필드명) //해당 필드의 평균값
mysql> select count(*) from imsi where level='B';
mysql> select count(*) from imsi where name like '%박%';
'박%';
'전_';
'전__';
where date between '2001-07-10' and '2001-08-30';
21. 자료의 갱신
mysql> update imsi set name='전세정' where name='마준석';
22. 특정 레코드의 삭제
mysql> delete from imsi where name='전세정';
백업과 복구
· 데이터베이스의 백업(backup)과 복구(restore)는 매우 중요하다.
MySQL에서는 mysqldump라는 파일을 실행하여 데이터베이스내의 데이터를 외부 파일로 저장할 수 있다. mysqldump는 mysql 디렉토리 밑의 bin 디렉토리에 존재하며 아래와 같은 명령어를 통해 백업을 수행한다.
mysqldump -u [user_name] -p [백업할 db_name] > [외부로 저장할 파일명]
23. linux3s? 데이터베이스를 백업해 보자.
$ mysqldump -u linux3s1 -p linux3s > linux3s_backup.sql
Enter password : ******
24. 백업된 파일의 확인
$ ls -l linux3s_backup.sql
25. 위 명령의 실행 결과 생성된 linux3s_backup.sql 파일의 내용을 확인한다.
$ cat linux3s_backup.sql
mysqldump 명령으로 백업된 데이터베이스는 해당 데이터베이스내에 있는 테이블의 구조를 정의한 데이터 정의문과 INSERT 문과 같은 데이터 조작문의 SQL 형태로 저장되어 있다.
이렇게 SQL 형태로 자장되면 아래와 같은 명령으로 쉽게 데이터를 복구할 수 있다. 또한 SQL은 데이터베이스의 표준언어이므로 MySQL이 아닌 다른 database server에 해당 database를 이식하려 할 때에도 호환성에 의한 문제가 거의 발생치 않는 장점이 있다.
26. 필요에 따라 linux3s_backup.sql 파일의 내용을 수정한 후 다음과 같은 방법으로 복구한다.
$ mysql -u linux3s1 -p linux3s < linux3s_backup.sql
Enter password : ******
※ 컬럼의 유형
○ 컬럼(Column)
- 데이터베이스를 구성하는 최소단위
- 컬럼들이 모여서 테이블(Table)을 구성
○ 컬럼의 유형
TINYINT
·부호 있는 정수 -128 ∼ 127
·부호 없는 정수 0 ∼ 255
·1 Byte
SMALLINT
·부호 있는 정수 -32768 ∼ 32767
·부호 없는 정수 0 ∼ 65535
·2 Byte
MEDIUMINT
·부호 있는 정수 -8388608 ∼ 8388607
·부호 없는 정수 0 ∼ 16777215
·3 Byte
INT 또는
INTEGER
·부호 있는 정수 -2147483648 ∼ 2147483647
·부호 없는 정수 0 ∼ 4294967295
·4 Byte
BIGINT
·부호 있는 정수 -9223372036854775808 ∼ -9223372036854775807
·부호 없는 정수 0 ∼ 18446744073709551615
·8 Byte
FLOAT
·단일 정밀도를 가진 부동 소수점
·-3.402823466E+38 ∼ 3.402823466E+38
DOUBLE
·2 배 정밀도를 가진 부동 소수점
·-1.79769313486231517E+308 ∼ 1.79769313486231517E+308
DATE
·날짜를 표현하는 유형
·1000-01-01 ∼ 9999-12-31
DATETIME
·날짜와 시간을 표현하는 유형
·1000-01-01 00:00:00 ∼ 9999-12-31 23:59:59
TIMESTAMP
·1970-01-01 00:00:00부터 2037년 까지 표현
·4 Byte
TIME
·시간을 표현하는 유형
·-839:59:59 ∼ 833:59:59
YEAR
·년도를 표현하는 유형
·1901년 ∼ 2155년
CHAR(M)
·고정길이 문자열을 표현하는 유형
·M = 1 ∼ 255
VARCHAR(M)
·가변길이 문자열을 표현하는 유형
·M = 1 ∼ 255
TINYBLOB
TINYTRXT
·255개의 문자를 저장
·BLOB : Binary Large Object의 약자
BLOB
TEXT
·63535개의 문자를 저장
MEDIUMBLOB
MEDIUMTEXT
·16777215개의 문자를 저장
LONGBLOB
LONGTEXT
·4294967295(4Giga)개의 문자를 저장
===================================================
● 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> TABLE mytest (
> email VARCHAR (25),
> phone_number INT,
> ID INT AUTO_INCREMENT,
> birthday DATE );
--------------------------------------------
====================================================
데이타베이스는 좀 더 복잡한 데이타 구조의 계층에 지나지 않는다. 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> TABLE mytest (
> email VARCHAR (25),
> phone_number INT,
> ID INT AUTO_INCREMENT,
> birthday DATE );
--------------------------------------------
===============================================================
2. Table 생성
자 그럼 이제 DB에 테이블을 생성해 봅시다.
DB에 테이블을 생성하건, 삭제하건, 아님 수정하건 Query문을 mysql에 건네주게 되어 있습니다.
이름과 나이, 전화번호, 주소만 가지고 있는 테이블을 만들어 봅시다.
$que = "CREATE TABLE Human_info (
id int(11) DEFAULT '0' NOT NULL auto_increment,
name varchar(10),
age int(3),
tel_num varchar(20),
address text,
PRIMARY KEY (id))";
위와 같은 Query문을 만들었습니다.
Query문을 만들 때는 문자열 변수에 내용을 입력하면 됩니다.
위에 것은 보기 좋으라고 줄을 나누었는데 이러기 싫은 한줄로 쫘악 해도 됩니다.
생성하는 Query문은 "CREAT TABLE 테이블명 ( 필드명과 Type )" 로 합니다.
즉 위에서 테이블명은 Human_Info가 되죠.
그리고 id, name, age, tel_num, address 같은 넘은 바로 스키마 이름이 되는 것이고, 그 옆에 int(11),
varchar(10), text 같은 것은 Type이 되는거죠.
그런데 사용할 스키마와는 별도로 id 라는 스키마를 지정했죠?
ID는 테이블에 데이터를 넣고 뺄 때 필요한 일련번호입니다.
DEFAULT '0' 은 첨에는 0부터 시작한다는 거죠.
NOT_NULL 은 절대 빈칸은 허용 안되다는 거죠. 어떤 넘이라도 일련번호를 붙여야 된다는 거죠.
auto_increment 는 별다른 값을 안 주어도 자동으로 증가하라는 겁니다.
그리고 밑에 PRIMARY KEY (id)를 씀으로서 기본키는 ID라는 것을 지정하는 겁니다.
그럼 위에 쓰인 Type에 대해서 이야기 하죠.
int(11)은 11자리의 정수형 타입닙니다.
varchar(20)은 20칸짜리 문자열이라는 거구요.
text는 개행문자를 포함하는 끝을 모르는(?) 문자열이라는 겁니다.
Type은 보통 위에 3가지만 쓰면 별 이상없을 겁니다.
다른 Type들은 별로 쓰이지는 않으니 필요할때마다 찾아서 하시면 됩니다.
자 그럼 이 $que 라는 질의어를 mysql에 전달합시다.
mysql_query( $que, $connect ) or echo"mysql_error()";
mysql_query() 라는 함수가 바로 질의어를 넘겨주는 함수입니다.
물론 생성할 때뿐만 아니라 질의어를 넘겨줄 때 이 함수를 쓰는 겁니다.
이렇게 하면 자신의 DB에는 id, name, age, tel_num, address를 필드로 하는 테이블이 생성된겁니다.
3. Table에 자료 추가
자 이제, 테이블을 생성했으니 자료를 추가해봅시다.
지금은 테이블만 만들어져있기 때문에 자료가 하나도 없습니다.
자료를 Insert할 때는 필드의 순서대로 입력을 해야 합니다.
우선 Query 문을 작성해 봅시다.
$que = "INSERT INTO Humna_info VALUES (
'',
'아무개',
24,
'000-000-0000',
'아무시
아무구 아무동'
)";
위의 "INSERT INTO 테이블명 VALUES (데이타...)" 라구 하는 것이 자료추가하는 질의어입니다.
VALUES ( 다음에 보면 처음에 '' 라고 되어 있죠?
이넘이 바로 id입니다. 즉 인위로 값을 넣지 않죠.
하지만 위에서 정의한 대로 auto_increment 이기 때문에 저절루 순서가 매겨집니다.
그리고 2번째 이름은 문자열 이기 때문에 '로 둘러싼 것 입니다. (" 쓰면 안됩니다.)
그리고 3번째 나이는 정수형이기 때문에 ' 가 필요없습니다.
이 질의어를 mysql_query를 통해서 MySQL에 일을 냅따 시킵시다.
mysql_query( $que, $connect ) or echo"mysql_error()";
그럼 이제 Human_Info라는 테이블에는 id 값이 0인 첫 번째 값이 들어간거죠.
4. Table의 자료 제거
이제 만들어 봤으니 제거 하는 방법을 알아 봅시다.
제거하는 방법은 추가하는 것보다 더 쉽습니다.
$que = "delete from Human_info where id=0";
mysql_query( $que, $connect );
delete from 테이블명 where 조건문 하면 됩니다. 그러고 $que를 MySQL에 넘겨주면 지웁니다.
위이 예에서는 Human_Info라는 테이블에서 id값이 0인 넘을 지우라는 거죠.
where id=0 했으니깐요.
만약 where age=20 하면 Human_info 테이블에서 age=20 인넘들은 모두 지우죠.
5. Table의 자료 수정
자료의 수정방법도 매우 쉽습니다.
$que = "UPDATE Human_Info SET name='막둥이' WHERE id=0";
mysql_query( $que, $connect );
수정할 때는 "UPDATE 테이블명 SET 수정할넘=수정할값 WHERE 조건문" 하믄 됩니다.
콤마(,)를 이용해서 여러개를 바꿀수 있습니다.
6. Table의 자료 출력
자 이제 만들고, 지우고, 수정하는 걸 알았으니 원하는 자료를 테이블에서 불러오는 방법을 해봅시다.
$que = "SELECT * FROM Human_Info";
$data = mysql_query( $que, $connect );
바로 SELECT, FROM을 이용해서 가져옵니다.
* 는 모든 것을 가져오라는 겁니다.
만약 name만 필요하다면 SELECT name FROM Human_Info 라구 하면 되고요.
name과 age가 필요하면 SELECT name, age FROM Human_Info 라고 하면 되죠.
Query문을 mysql_query를 통해서 MYSQL에 전달하면 mysql_query() 함수는 찾은 결과를 return 하게 됩니다.
위에서는 $data라는 변수에 결과값을 저장하였죠.
그럼 $data 변수안에는 찾은 결과가 배열의 형태로 입력되어져 있습니다.
그럼 우선 몇 개가 찾아졌는지 함 알아봅시다.
$total = mysql_affected_rows();
위와 같이 하면 총 몇 개가 찾아졌는지 알수 있습니다.
mysql_affected_rows() 이라는 함수는 찾아진 값의 갯수를 return 합니다.
자 그럼 이제 $data안에 있는 내용을 출력하기로 해봅시다.
출력하기 위해서는 mysql_data_seek($data,$i) 라는 함수를 알아야 합니다.
mysql_data_seek()는 $data 파일에서 $i 번째의 데이터를 지정시켜 놓는 함수입니다.
즉 mysql_data_seek($data,0) 이라고 하면 찾아진 결과의 첫 번째 데이타를 지정해 놓는 거죠.
지정을 했으면 다음과 같은 방법으로 값을 가져옵니다.
$human = mysql_fetch_array( $data );
mysql_fetch_array()는 $data에서 지정된 넘의 값을 배열로 return 합니다.
즉 $human[id], $human[name], $human[age], $human[tel_num], $human[address] 가 되는거죠.
출력할 때는 echo"이름 : $human[name], 나이 : $human[age]살"로 하면 되죠.
이름 : 아무개, 나이 : 20살
위에 처럼 출력 되겠죠.
그럼 리스트처럼 주르륵 하기 위해서는 for문을 사용하면 됩니다.
for($i = 0; $i < $total; $i++)
{
mysql_data_seek($data,$i);
$human = mysql_fetch_array( $data );
echo"이름 : $human[name], 나이 : $human[age]살
";
}
위와 같이 하면 주르륵 나오겠죠?
쉽죠?
그럼 select 문에 대해서 몇가지만 더 적겠습니다.
$que = "SELECT * FROM 테이블명 order by id";
위에 처럼 하면 order by id 라는 구문 때문에 id의 정렬순으로 결과가 나옵니다.
만약 역순으로 할려면 order by id desc 라고 하면 되지요.
그리고 limit 숫자 하면 숫자만큼의 갯수만 나옵니다.
$que = "SELECT * FROM 테이블명 order by id limit 10";
위에 처럼 하면 10개만 나오죠.
만약 검색처럼 어떤 문자열을 포함하고 있는 넘을 찾을 때는 다음과 같이 하면 됩니다.
이름에 "김"이 포함된 넘을 찾는 다고 합시다.
$que = "SELECT * FROM 테이블명 WHERE name LIKE '%김%'";
위에서 WHERE라는 넘은 아까도 나왔지만 조건을 붙일 때 쓰는 넘입니다.
그리고 LIKE '%검색문자%' 라구 덧 붙이면 name 필드중 "김" 이라는 문자가 있는 넘을 찾아라는 겁니다.
자 그럼 이제 DB에 테이블을 생성해 봅시다.
DB에 테이블을 생성하건, 삭제하건, 아님 수정하건 Query문을 mysql에 건네주게 되어 있습니다.
이름과 나이, 전화번호, 주소만 가지고 있는 테이블을 만들어 봅시다.
$que = "CREATE TABLE Human_info (
id int(11) DEFAULT '0' NOT NULL auto_increment,
name varchar(10),
age int(3),
tel_num varchar(20),
address text,
PRIMARY KEY (id))";
위와 같은 Query문을 만들었습니다.
Query문을 만들 때는 문자열 변수에 내용을 입력하면 됩니다.
위에 것은 보기 좋으라고 줄을 나누었는데 이러기 싫은 한줄로 쫘악 해도 됩니다.
생성하는 Query문은 "CREAT TABLE 테이블명 ( 필드명과 Type )" 로 합니다.
즉 위에서 테이블명은 Human_Info가 되죠.
그리고 id, name, age, tel_num, address 같은 넘은 바로 스키마 이름이 되는 것이고, 그 옆에 int(11),
varchar(10), text 같은 것은 Type이 되는거죠.
그런데 사용할 스키마와는 별도로 id 라는 스키마를 지정했죠?
ID는 테이블에 데이터를 넣고 뺄 때 필요한 일련번호입니다.
DEFAULT '0' 은 첨에는 0부터 시작한다는 거죠.
NOT_NULL 은 절대 빈칸은 허용 안되다는 거죠. 어떤 넘이라도 일련번호를 붙여야 된다는 거죠.
auto_increment 는 별다른 값을 안 주어도 자동으로 증가하라는 겁니다.
그리고 밑에 PRIMARY KEY (id)를 씀으로서 기본키는 ID라는 것을 지정하는 겁니다.
그럼 위에 쓰인 Type에 대해서 이야기 하죠.
int(11)은 11자리의 정수형 타입닙니다.
varchar(20)은 20칸짜리 문자열이라는 거구요.
text는 개행문자를 포함하는 끝을 모르는(?) 문자열이라는 겁니다.
Type은 보통 위에 3가지만 쓰면 별 이상없을 겁니다.
다른 Type들은 별로 쓰이지는 않으니 필요할때마다 찾아서 하시면 됩니다.
자 그럼 이 $que 라는 질의어를 mysql에 전달합시다.
mysql_query( $que, $connect ) or echo"mysql_error()";
mysql_query() 라는 함수가 바로 질의어를 넘겨주는 함수입니다.
물론 생성할 때뿐만 아니라 질의어를 넘겨줄 때 이 함수를 쓰는 겁니다.
이렇게 하면 자신의 DB에는 id, name, age, tel_num, address를 필드로 하는 테이블이 생성된겁니다.
3. Table에 자료 추가
자 이제, 테이블을 생성했으니 자료를 추가해봅시다.
지금은 테이블만 만들어져있기 때문에 자료가 하나도 없습니다.
자료를 Insert할 때는 필드의 순서대로 입력을 해야 합니다.
우선 Query 문을 작성해 봅시다.
$que = "INSERT INTO Humna_info VALUES (
'',
'아무개',
24,
'000-000-0000',
'아무시
아무구 아무동'
)";
위의 "INSERT INTO 테이블명 VALUES (데이타...)" 라구 하는 것이 자료추가하는 질의어입니다.
VALUES ( 다음에 보면 처음에 '' 라고 되어 있죠?
이넘이 바로 id입니다. 즉 인위로 값을 넣지 않죠.
하지만 위에서 정의한 대로 auto_increment 이기 때문에 저절루 순서가 매겨집니다.
그리고 2번째 이름은 문자열 이기 때문에 '로 둘러싼 것 입니다. (" 쓰면 안됩니다.)
그리고 3번째 나이는 정수형이기 때문에 ' 가 필요없습니다.
이 질의어를 mysql_query를 통해서 MySQL에 일을 냅따 시킵시다.
mysql_query( $que, $connect ) or echo"mysql_error()";
그럼 이제 Human_Info라는 테이블에는 id 값이 0인 첫 번째 값이 들어간거죠.
4. Table의 자료 제거
이제 만들어 봤으니 제거 하는 방법을 알아 봅시다.
제거하는 방법은 추가하는 것보다 더 쉽습니다.
$que = "delete from Human_info where id=0";
mysql_query( $que, $connect );
delete from 테이블명 where 조건문 하면 됩니다. 그러고 $que를 MySQL에 넘겨주면 지웁니다.
위이 예에서는 Human_Info라는 테이블에서 id값이 0인 넘을 지우라는 거죠.
where id=0 했으니깐요.
만약 where age=20 하면 Human_info 테이블에서 age=20 인넘들은 모두 지우죠.
5. Table의 자료 수정
자료의 수정방법도 매우 쉽습니다.
$que = "UPDATE Human_Info SET name='막둥이' WHERE id=0";
mysql_query( $que, $connect );
수정할 때는 "UPDATE 테이블명 SET 수정할넘=수정할값 WHERE 조건문" 하믄 됩니다.
콤마(,)를 이용해서 여러개를 바꿀수 있습니다.
6. Table의 자료 출력
자 이제 만들고, 지우고, 수정하는 걸 알았으니 원하는 자료를 테이블에서 불러오는 방법을 해봅시다.
$que = "SELECT * FROM Human_Info";
$data = mysql_query( $que, $connect );
바로 SELECT, FROM을 이용해서 가져옵니다.
* 는 모든 것을 가져오라는 겁니다.
만약 name만 필요하다면 SELECT name FROM Human_Info 라구 하면 되고요.
name과 age가 필요하면 SELECT name, age FROM Human_Info 라고 하면 되죠.
Query문을 mysql_query를 통해서 MYSQL에 전달하면 mysql_query() 함수는 찾은 결과를 return 하게 됩니다.
위에서는 $data라는 변수에 결과값을 저장하였죠.
그럼 $data 변수안에는 찾은 결과가 배열의 형태로 입력되어져 있습니다.
그럼 우선 몇 개가 찾아졌는지 함 알아봅시다.
$total = mysql_affected_rows();
위와 같이 하면 총 몇 개가 찾아졌는지 알수 있습니다.
mysql_affected_rows() 이라는 함수는 찾아진 값의 갯수를 return 합니다.
자 그럼 이제 $data안에 있는 내용을 출력하기로 해봅시다.
출력하기 위해서는 mysql_data_seek($data,$i) 라는 함수를 알아야 합니다.
mysql_data_seek()는 $data 파일에서 $i 번째의 데이터를 지정시켜 놓는 함수입니다.
즉 mysql_data_seek($data,0) 이라고 하면 찾아진 결과의 첫 번째 데이타를 지정해 놓는 거죠.
지정을 했으면 다음과 같은 방법으로 값을 가져옵니다.
$human = mysql_fetch_array( $data );
mysql_fetch_array()는 $data에서 지정된 넘의 값을 배열로 return 합니다.
즉 $human[id], $human[name], $human[age], $human[tel_num], $human[address] 가 되는거죠.
출력할 때는 echo"이름 : $human[name], 나이 : $human[age]살"로 하면 되죠.
이름 : 아무개, 나이 : 20살
위에 처럼 출력 되겠죠.
그럼 리스트처럼 주르륵 하기 위해서는 for문을 사용하면 됩니다.
for($i = 0; $i < $total; $i++)
{
mysql_data_seek($data,$i);
$human = mysql_fetch_array( $data );
echo"이름 : $human[name], 나이 : $human[age]살
";
}
위와 같이 하면 주르륵 나오겠죠?
쉽죠?
그럼 select 문에 대해서 몇가지만 더 적겠습니다.
$que = "SELECT * FROM 테이블명 order by id";
위에 처럼 하면 order by id 라는 구문 때문에 id의 정렬순으로 결과가 나옵니다.
만약 역순으로 할려면 order by id desc 라고 하면 되지요.
그리고 limit 숫자 하면 숫자만큼의 갯수만 나옵니다.
$que = "SELECT * FROM 테이블명 order by id limit 10";
위에 처럼 하면 10개만 나오죠.
만약 검색처럼 어떤 문자열을 포함하고 있는 넘을 찾을 때는 다음과 같이 하면 됩니다.
이름에 "김"이 포함된 넘을 찾는 다고 합시다.
$que = "SELECT * FROM 테이블명 WHERE name LIKE '%김%'";
위에서 WHERE라는 넘은 아까도 나왔지만 조건을 붙일 때 쓰는 넘입니다.
그리고 LIKE '%검색문자%' 라구 덧 붙이면 name 필드중 "김" 이라는 문자가 있는 넘을 찾아라는 겁니다.
'Computer > Linux' 카테고리의 다른 글
Wine 으로 Starcraft 하고 놀기 (0) | 2006.07.19 |
---|---|
windows에서 apache php설정 (0) | 2005.10.24 |
리눅스에서 php apache설치 (0) | 2005.07.14 |
mysql생성,복구,백업 (0) | 2005.07.14 |
MYSQL 관련 FAQ (0) | 2005.07.14 |