데이터베이스 MYSQL
데이터베이스 : 정보를 관리하는 전문 에플리케이션
File과 DATABASE
File
가장 기본적이고 원시적인 형태의 데이터 관리 수단
어느 시스템에서나 쓸 수 있고 무언가를 설치할 필요도 없는 매우 심플하다.
DATABASE
공부해야, 여러가지를 설치해야 쓸 수 있다.
궁극적으로 웹에플리케이션을 만들기 위해서는 DATABASE가 필수적이다.
가장 큰 장점 : 안전하다.
또 장점 : 빠르다(index) 정보를 잘 정리해둬서 빠르게 찾을 수 있다.
프로그래밍적으로 제어가능하다 (SQL 이용)
데이터베이스 분류
현재 가장 성공적인 데이터베이스 : 관계형 데이터베이스
MYSQL : opensource
웹과 매우 깊게 얽혀있다.
MySQL의 주인 변천사
MySQL AB -> SUN -> 'Oracle'
Database를 이해하는데 가장 핵심적인 키워드
"Structured"
데이터베이스 MYSQL
글로된 정보를 표로 정리할 수 있다.
왼쪽 정보보다 오른쪽 정보가 더 정돈된 느낌이다 => 구조화 되었다.
표 = > table
=> 대표적인 프로그램 EXCEL
장점 => 나이순으로, 성별로 등등 정렬이 용이하다.
EXCEL도 일종의 데이터베이스
but 진짜 데이터베이스와의 가장 중요한 차이점
=> SQL
Structured Query Language
Structured : 표와 같은 정보들로 여기서 해석하면 됌
Query : 질의하다. 질문하다
컴퓨터에게 구조화된 정보를 질의하는 프로그래밍 언어 => SQL
Client 컴퓨터에서 Server 컴퓨터에게
명령을 하면 전달이 된다. 이 전달할 때 사용하는 언어 => SQL
Server컴퓨터는 그 응답으로 Client 컴퓨터에게 표로 된 정보를 전달한다.
한번 더 복습
MySQL 사용법
MySQL에서 가장 핵심적인 기술 => 서버쪽 기술
이번 수업에서 쓸 프로그램
MySQL Client 쪽 => MySQL monitor
MySQL monitor
MySQL 을 설치하면 자동으로 설치되어 있다.
단점. 명령어를 줘서 작동하는 방식으로 조금 어려울 수도 있다.
장점. 작동하는 과정을 투명하게 보여줘서 교육적인 가치가 높다.
Window에서 MySQL monitor 실행
Window키 + R => cmd실행
MySQL monitor의 위치 ==> C, bitnami, wamp, mysql, bin, mysql.exe
cd C:\Bitnami\wampstack-7.1.12-0\mysql\bin 입력
mysql -hlocalhost -uroot -p 입력
Enter password: 에 bitnami설치할 때 입력했던 비밀번호 입력
mysql -hlocalhost -uroot -p 의 의미
mysql => mysql monitor라는 프로그램을 실행시키겠다는 의미
-hlocalhost => -h 뒤에적은 주소에 접속한다. => 여기서는 mySQL이 설치되어있는 그 폴더에 접속한다.
-uroot => -u 뒤에따라오는 것이 비밀번호라는 것이다. => localhost에 접속할 수 있는 비밀번호가 root라는 뜻
-p => 비밀번호를 입력받아라 라는 뜻 => -p 뒤에 바로 password를 입력할 수 있지만 그러면 해킹의 위험이 크기 때문에 권장되지 않는 방식
DATABASE => Table들을 묶어주는 일종의 디렉토리
하나의 서버 => 여러개의 데이터베이스
하나의 데이터베이스 => 여러개의 테이블
mySQL 사용
데이터베이스가 존재하고 있는지 확인
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
이런식으로 나온다. 지금은 데이터베이스가 4개 있다는 것을 확인할 수 있다.
지금있는데 데이터베이스는 MySQL이 필요해서 만든 것. 건들면 안된다.
새로운데이터베이스 만들기
tip. 문법적인 것은 대문자로, 아닌것은 소문자로 적어서 헛갈림을 방지한다.
CREATE DATABASE opentutorials CHARACTER SET utf8 COLLATE utf8_general_ci;
=> Query OK, 1 row affected (0.46 sec) 이렇게 나오면 성공
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| opentutorials |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
생성되었다.
데이터베이스 사용하기
use opentutorials
=> Database changed 이렇게 나오면 성공
데이터베이스에 테이블 만들기
이런 엑셀에서 표를 꾸미는 것과 같은 것을 데이터베이스에서 해보자
MySQL monitor에서는 SQL로 데이블을 작성한다.
` 그레이브 엑센트 <- 물결표시 밑에 있는 기호 => 약속되어 있는 문법적인 요소의 이름을 사용하고 싶을때
CREATE TABLE `create` ( (여기서 엔터를 치면)
-> 이런 화살표 기호가 나오는데 이것은 더 작성할 게 남았다는 뜻이다.
-> `id` int(11) NOT NULL AUTO_INCREMENT, => col의 이름, id에는 숫자가 와야한다는 것을 강조 not null 은 반드시 id 값이 입력되어야 한다는 것이고
auto_increment는 행을 추가할 때 자동으로 1씩 증가하라는 뜻
-> `title` varchar(100) NOT NULL,=> title에 들어가는 정보가 100보다 작은 정보라는 뜻
-> `description` text NOT NULL,=> description 에 들어오는 정보는 긴 텍스트를 받을 수 있어야 한다라는 뜻
-> `author` varchar(30) NOT NULL,
-> `created` datetime NOT NULL, 시간과 날짜를 의미하는 데이터 형식
-> PRIMARY KET(id) => 성능을 위해 사용하는 옵션
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
=> 세미콜론 : 이렇게 작성하고 enter을 치면 작성한 명령들이 데이터베이스 서버에 전송되서 명령을 실행한다.
Query OK, 0 rows affected (0.08 sec) 이렇게 나오면 성공
테이블 만든것을 확인
show tables
+-------------------------+
| Tables_in_opentutorials |
+-------------------------+
| topic |
+-------------------------+
1 row in set (0.00 sec)
성공
엑셀은 아무거나 집어넣어도 아무말을 안한다.
but database는 잘못 입력하면 작동 안한다. (엄격함)
약간 불편하게 사용하지만 큰 신뢰를 가지고 사용할 수 있는 커다란 장점
행이 추가되는 것 => 정보의 추가
열이 추가되는 것 => 구조를 추가
INSERT INTO `topic` (title, description, author, created) VALUES('about javascript', 'javascript is ~', 'egoing', '2015-4-10 12:20:5');
정보를 테이블에 추가한다. 어디 테이블에 추가할 것이냐면 토픽에 => id를 제외한 네가지에 정보를 추가한다.
VALUES 안에 값 입력. 순서대로 입력
INSERT INTO `topic` (title, description, author, created) VALUES('about javascript', 'javascript is ~', 'egoing', '2015-4-10 12:20:5');
Query OK, 1 row affected (0.03 sec) 이렇게 나오면 성공
데이터베이스에서 데이터 가져오기
SELECT * FROM topic; => topic에서 데이터를 가져오겠다.
mysql> SELECT * FROM topic;
+----+------------------+-----------------+--------+---------------------+
| id | title | description | author | created |
+----+------------------+-----------------+--------+---------------------+
| 1 | about javascript | javascript is ~ | egoing | 2015-04-10 12:20:05 |
+----+------------------+-----------------+--------+---------------------+
1 row in set (0.00 sec)
이렇게 나오면 성공
만약 알고 싶은 정보가 title과 author 만이라면
SELECT title, author FROM topic;
데이터를 하나 더 추가
INSERT INTO `topic` (title, description, author, created) VALUES('about variable and constant', 'variable is ~', 'pkiop', '2015-4-10 12:30:50');
mysql> SELECT * FROM topic
-> ;
+----+-----------------------------+-----------------+--------+---------------------+
| id | title | description | author | created |
+----+-----------------------------+-----------------+--------+---------------------+
| 1 | about javascript | javascript is ~ | egoing | 2015-04-10 12:20:05 |
| 2 | about variable and constant | variable is ~ | pkiop | 2015-04-10 12:30:50 |
+----+-----------------------------+-----------------+--------+---------------------+
2 rows in set (0.00 sec) 성공
id값은 자동으로 증가하는 것을 알 수 있다.
행 삭제 => 여러 정보들 중 하나를 이용하면 되는데 가장 명확한 것이 id
select id,title,author,created from topic WHERE id=2;
+----+-----------------------------+--------+---------------------+
| id | title | author | created |
+----+-----------------------------+--------+---------------------+
| 2 | about variable and constant | pkiop | 2015-04-10 12:30:50 |
+----+-----------------------------+--------+---------------------+
1 row in set (0.00 sec)
id가 2인 행을 가져온다는 뜻
select id,title,author,created FROM topic ORDER BY id DESC;
id값을 내림차순으로 정렬시킨다.