데이터베이스 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값을 내림차순으로 정렬시킨다. 

'웹 프로그래밍' 카테고리의 다른 글

외부에서 Mysql 접속을 위해 고려해야 할 것들  (0) 2020.09.15
데이터베이스 MYSQL 실습  (0) 2017.12.28
PHP 실습  (0) 2017.12.22
JavaScript 실습  (0) 2017.12.21
JavaScript 실습  (0) 2017.12.20

+ Recent posts