1. MySQL의 개요
2. MySQL의 설치
3. MySQL의 사용법
4. C API
5. Perl DBI
5. PHP3와 MySQL을 이용한 Web과 DB의 연동
% gzip -d mysql-Version.tar.gz % tar xvf msql-Version.tar % cd mysql-Version |
% configure => 각 시스템 환경에 적합한 Makefile을 생성 % make => 컴파일 % make check => 컴파일 결과를 검사 % make install => 실행 파일을 적당한 디렉토리에 설치 % cd scripts % mysgl_install_db => MySQL의 권한에 대한 테이블을 생성 |
% mysql_fix_private_tables |
% configure --prefix=설치디렉토리명 |
- 설치 후 디렉토리 구조
bin/ : 실행 파일 include/mysql : 헤드 파일 lib/mysql : 라이브러리 libexec : MySQL 데몬인 mysqld var : 실제 데이타 |
% gzip -d mysql-Version-OS.tar.gz % tar xvf msql-Version-OS.tar % ln -s mysql-Version-Os mysql % cd mysql |
% mysgl_install_db => MySQL의 권한에 대한 테이블을 생성 |
% rpm -i MySQL-Version.src.rpm % cd /usr/src/readhat/SOURCE % configure => 각 시스템 환경에 적합한 Makefile을 생성 % make => 컴파일 % make check => 컴파일 결과를 검사 % make install => 실행 파일을 적당한 디렉토리에 설치 % cd scripts % mysgl_install_db => MySQL의 권한에 대한 테이블을 생성 |
MySQL-Version.i386.rpm MySQL-cilent-Version.i386.rpm MySQL-bench-Version.i386.rpm MySQL-devel-Version.i386.rpm |
mysql |
|
mysqladmin |
|
mysqld |
|
mysqlshow |
|
safe_mysqld |
|
isamchk |
|
% safe_mysqld | 데몬을 안전하게 수행 |
% mysqld | 데몬을 수행, 디폴트 포드 : 3306 |
% mysqld -P 333 | 포트 번호를 지정하여 데몬을 수행 |
% mysqlshow -u root +-----------+ | Databases | +-----------+ | mysql | | test | +-----------+ |
- " -u root " : root 가 사용한다는 옵션
- 최초 설치시 : mtsql과 test 두개의 데이블이 존재
% mysqlshow -u root mysql Database: mysql +--------------+ | columns_priv | | db | | func | | host | | tables_priv | | user | +--------------+ |
- user 테이블이 사용자 권한에 관한 테이블임
% mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 to server version: 3.22.22 Type 'help' for help. mysql> use mysql 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> select * from user; +-----------+------+----------+-------------+-------------+-------------+------+ | Host | User | Password | Select_priv | Insert_priv | Update_priv | Delet| +-----------+------+----------+-------------+-------------+-------------+------+ | localhost | root | | Y | Y | Y | Y | | orange | root | | Y | Y | Y | Y | | localhost | | | N | N | N | N | | orange | | | N | N | N | N | +-----------+------+----------+-------------+-------------+-------------+------+ 4 rows in set (0.01 sec) mysql> |
- "*.priv" 컴럼: 사용 권한에 대한 설정, Y 이면 권한을 가짐을, N이면 권한이 없음을 의미
- "Password" 컬럼 : 암호의 설정 상태를 의미, 현제 root는 암호가 없음
mysql> update user set password = password('apple1234') => 암호 설정 -> where user='root' ; Query OK, 2 rows affected (0.13 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> quit => 종료 Bye % mysqladmin -u root reload => 권한이 변경된 경우 변경된 권한을 다시 읽어 들임 % mysql -u root -p => 암호가 있는 경우 -p 옵션을 붙여서 mysql을 수행 Enter password: XXXXXXXXXX Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 to server version: 3.22.22 Type 'help' for help. mysql> select * from user; +-----------+------+------------------+-------------+-------------+------------+ | Host | User | Password | Select_priv | Insert_priv | Update_priv| +-----------+------+------------------+-------------+-------------+------------+ | localhost | root | 32b157395f7543c0 | Y | Y | Y | | orange | root | 32b157395f7543c0 | Y | Y | Y | | localhost | | | N | N | N | | orange | | | N | N | N | +-----------+------+------------------+-------------+-------------+------------+ 4 rows in set (0.01 sec) mysql> |
% mysql -u root -p mysql Enter password:XXXXXXXXXX Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 to server version: 3.22.22 Type 'help' for help. mysql> insert into user values('localhost', 'wiseo', ==> 사용자 wiseo에게 모든 권한 -> password('apple2000'), 'Y', 'Y', 'Y', 'Y', -> 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', -> 'Y', 'Y'); Query OK, 1 row affected (0.01 sec) mysql> select * from user; +-----------+-------+------------------+-------------+-------------+-----------+ | Host | User | Password | Select_priv | Insert_priv | Update_pri| +-----------+-------+------------------+-------------+-------------+-----------+ | localhost | root | 32b157395f7543c0 | Y | Y | Y | | orange | root | 32b157395f7543c0 | Y | Y | Y | | localhost | | | N | N | N | | orange | | | N | N | N | | localhost | wiseo | 6da73b5d2ab9ea69 | Y | Y | Y | +-----------+-------+------------------+-------------+-------------+-----------+ 5 rows in set (0.01 sec) mysql> |
- 권한을 부여 하고자 한다면 해당 컬럼의 값을 'Y'로 아니면 'N'으로 설정
mysql> insert into user values('localhost', 'wiseo', -> password('apple2000'), 'Y', 'Y', 'Y'); Query OK, 1 row affected (0.01 sec) mysql> |
mysql> grant all priviledges on *.* to wiseo@localhost ==> 사용자 wiseo에게 모든 권한 -> identified by 'apple2000' with grant option; Query OK, 0 rows affected (0.01 sec) mysql> |
mysql> grant reload,process on *.* to wiseo@localhost -> identified by 'apple2000' with grant option; Query OK, 0 rows affected (0.01 sec) mysql> |
mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> |
% mysqladmin -u root -p reload Enter password: XXXXXXXX |
% cat > .my.cnf [client] password=암호 ^D % chmod 600 .my.cnf => 다른 사람이 보지 못하도록 파일 접근 권한을 설정 % |
TYNYINT |
|
SMALLINT |
|
MEDIUMINT |
|
INT 또는 INTEGER |
|
BIGINT |
|
FLOAT |
|
DOUBLE |
|
DATE |
|
DATETIME |
|
TIMESTAMP |
|
TIME |
|
YEAR |
|
CHAR(M) |
|
VARCHAR(M) |
|
TINYBLOB TINYTEXT |
|
BLOB TEXT |
|
MEDIUMBLOB MEDIUMTEXT |
|
LONGBLOB LONGTEXT |
|
% mysqladmin create super Database "guestbook" created. % mysqlshow +-----------+ | Databases | +-----------+ | mysql | | guestbook | | test | +-----------+ % |
% mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 to server version: 3.22.22 Type 'help' for help. mysql> create datatbase guestbook; Query OK, 1 row affected (0.01 sec) mysql> show databases; +-----------+ | Databases | +-----------+ | mysql | | guestbook | | test | +-----------+ Query OK, 1 row affected (0.01 sec) mysql> |
테이블 명 : guest 컬럼 명 : 일련번호(no) -> 자동으로 부여되는 일련 번호, 키 이름(name) 나이(age) 전화번호(phone) 전자우편주소(email) 주소(address) |
CREATE TABLE 테이블명 (컬럼의 형식) ; |
% mysql mysql> use guestbook; Database changed mysql> CREATE TABLE guest(no INT PRIMARY KEY NOT NULL AUTO_INCREMENT, -> name CHAR(20), age TINYINT, phone VARCHAR(20),email VARCHAR(30), -> address VARCHAR(50)); Query OK, 0 rows affected (0.01 sec) mysql> SHOW TABLES; => 생성된 테이블을 확인 +---------------------+ | Tables in guestbook | +---------------------+ | guest | +---------------------+ 1 row in set (0.00 sec) mysql> |
no | name | age | phone | address | |
1 | 홍길동 | 20 | 510-0001 | hong@jisan.ac.kr | 부산 |
2 | 김유신 | 22 | 510-1004 | kim@jisan.ac.kr | 경주 |
3 | 강감찬 | 23 | 510-9000 | gang@jisan.ac.kr | 대구 |
4 | 이순신 | 21 | 560-8000 | lee@jisan.ac.kr | 여수 |
5 | 임꺽정 | 30 | 800-7000 | lim@jisan.ac.kr | 대전 |
6 | 유관순 | 21 | 700-5555 | you@jisan.ac.kr | 서울 |
7 | 윤봉길 | 28 | 288-5757 | youn@jisan.ac.kr | 인천 |
8 | 안중근 | 33 | 566-4545 | ann@jisan.ac.kr | 수원 |
9 | 박문수 | 25 | 767-9090 | park@jisan.ac.kr | 충주 |
10 | 정철수 | 55 | 777-9999 | jung@jisan.ac.kr | 광주 |
INSERT INTO 테이블명 VALUES(컬럼의 데이터 값...) ; |
mysql> INSERT INTO guest VALUES(1,'홍길동',20,'510-0001', -> 'hong@jisan.ac.kr','부산'); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO guest VALUES(NULL,'김유신',22,'510-1004', -> 'kim@jisan.ac.kr','경주'); Query OK, 1 row affected (0.05 sec) (중략) mysql> select * from guest; +----+--------+------+----------+------------------+---------+ | no | name | age | phone | email | address | +----+--------+------+----------+------------------+---------+ | 1 | 홍길동 | 20 | 510-0001 | hong@jisan.ac.kr | 부산 | | 2 | 김유신 | 22 | 510-1004 | kim@jisan.ac.kr | 경주 | | 3 | 강감찬 | 23 | 510-9000 | gang@jisan.ac.kr | 대구 | | 4 | 이순신 | 21 | 560-8000 | lee@jisan.ac.kr | 여수 | | 5 | 임꺽정 | 30 | 800-7000 | lim@jisan.ac.kr | 여수 | | 6 | 유관순 | 21 | 700-5555 | you@jisan.ac.kr | 서울 | | 7 | 윤봉길 | 28 | 288-5757 | youn@jisan.ac.kr | 인천 | | 8 | 안중근 | 33 | 566-4545 | ann@jisan.ac.kr | 수원 | | 9 | 박문수 | 25 | 767-4545 | park@jisan.ac.kr | 충주 | | 10 | 정철수 | 55 | 777-9999 | jung@jisan.ac.kr | 광주 | +----+--------+------+----------+------------------+---------+ 10 rows in set (0.00 sec) mysql> |
UPDATE 테이블명 SET 컬럼명=식 ,... [ WHERE 조건 ]; |
mysql> Update guest SET address='대전' where name='임꺽정'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from guest where name='임꺽정'; +----+--------+------+----------+-----------------+---------+ | no | name | age | phone | email | address | +----+--------+------+----------+-----------------+---------+ | 5 | 임꺽정 | 30 | 800-7000 | lim@jisan.ac.kr | 대전 | +----+--------+------+----------+-----------------+---------+ 1 row in set (0.00 sec) mysql> |
|
SELECT 컬럼명 [AS 구문] ,.. FROM 테이블명 [WHERE 조건] [ORDER BY 정렬기준 컬럼 ACS|DESC ] [GROUP BY 구룹화 기준 컬럼 ]; |
mysql> SELECT name,age from guest; +--------+------+ | name | age | +--------+------+ | 홍길동 | 20 | | 김유신 | 22 | | 강감찬 | 23 | | 이순신 | 21 | | 임꺽정 | 30 | | 유관순 | 21 | | 윤봉길 | 28 | | 안중근 | 33 | | 박문수 | 25 | | 정철수 | 55 | +--------+------+ 10 rows in set (0.00 sec) mysql> SELECT name,age from guest where age <= 25 ; +--------+------+ | name | age | +--------+------+ | 홍길동 | 20 | | 김유신 | 22 | | 강감찬 | 23 | | 이순신 | 21 | | 유관순 | 21 | | 박문수 | 25 | +--------+------+ 6 rows in set (0.00 sec) mysql> SELECT name,age from guest ORDER BY age DESC; +--------+------+ | name | age | +--------+------+ | 정철수 | 55 | | 안중근 | 33 | | 임꺽정 | 30 | | 윤봉길 | 28 | | 박문수 | 25 | | 강감찬 | 23 | | 김유신 | 22 | | 이순신 | 21 | | 유관순 | 21 | | 홍길동 | 20 | +--------+------+ 10 rows in set (0.01 sec) mysql> SELECT AVG(age) from guest ; +----------+ | AVG(age) | +----------+ | 27.8000 | +----------+ 1 row in set (0.07 sec) mysql> SELECT AVG(age) AS '평균 연령' from guest ; +-----------+ | 평균 연령 | +-----------+ | 27.8000 | +-----------+ 1 row in set (0.01 sec) mysql> |
LOAD DATA INFILE '파일 경로명' INTO TABLE 테이블명 FIELDS TERMINATED BY '필드구분자'; |
% cat > guest.txt NULL,서태지,22,666-9999,seo@jisan.ac.kr,진주 NULL,신승훈,33,999-6666,shin@jisan.ac.kr,청주 % mysql guestbook Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 15 to server version: 3.22.22 Type 'help' for help. mysql> LOAD DATA INFILE '/home/prof/wiseo/guest.txt' INTO TABLE guest -> FIELDS TERMINATED BY ',';=> 파일명은 반드시 절대경로명 Query OK, 2 rows affected (0.03 sec) Records: 2 Deleted: 0 Skipped: 0 Warnings: 2 mysql> |
SELECT 문 INTO OUTFILE '출력파일의 경로명'; |
mysql> SELECT * from guest where age <= 25 -> INTO OUTFILE 'out.txt' -> FIELDS TERMINATED BY ',' ; => 상대경로명을 사용하면 기준은 DB가 존재하는 디렉토리 mysql> |
ALTER TABLE 테이블명 RENAME 새테이블명 ; |
ALTER TABLE 테이블명 ADD 컬럼명 컬럼 유형; => 새로운 컬럼을 추가 ALTER TABLE 테이블명 DROP COLUMN 컬럼명; => 컬럼을 삭제 |
DROP TABLE 테이블명 ; |
#include "mysql.h" |
% cc -I/usr/include/mysql -L/usr/lib/mysql myapp.c -o myapp -lm -lmysqlclient |
MYSQL *mysql_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd)
- 데이터베이스 엔진과 연결을 설정하는 함수
- 파라메터
mysql | 연결에 관한 정보, (MYSQL*) 0으로 지정하면 연결에 관한 정보를 위한 메모리를 할당하고, 해제(free)시킨다. 단, 이 옵션을 쓰면 mysql_connect로부터 오류 메시지를 얻을 수 없다 |
host | 호스트 이름, 또는 IP address, NULL이면 'localhost'로 처리 |
user | 사용자의 MySQL login ID, NULL이면 '현재 사용자'로 처리, ODBC 상에서는 생략할 수 없음 |
passwd | 암호 |
- 복귀 값 : 연결이 설정이 성공하면 mysql을, 실패하면 NULL을 복귀
mysql | mysql_connect() 함수가 복귀한 값을 지정 |
db | 사용하고자 하는 데이터베이스의 이름을 의미하는 문자열 |
- 복귀 값 :
Non-zero | mysql_fetch_row()가 결과값을 모두 fetch했기 때문에, 더 이상 fetch할 것이 없다면 |
Zero(0) | mysql_fetch_row()가 fetch할 수 있는 데이터가 남아있음. |
5.1 Perl DBI 란?
5.2 Perl DBI의 설치