etc/생활코딩-웹프로그래밍

07 데이터베이스 이론 (MySQL 기본적인 이론), 생활코딩

seul chan 2017. 1. 1. 15:54

34.데이터베이스(MySQL) 이론(https://opentutorials.org/course/1688/9386) 12.31


1.데이터베이스 이론1 

*데이터베이스? 정보를 관리하는 전문 에플리케이션

-File: 가장 기본적, 원시적인 데이터 수단. 어디서든 쉽게 쓸 수 있음

-데이터베이스: (에플리케이션)- 파일을 사용하지 않고 database를 통해서 사용

데이터베이스의 장점은? 안전하다, 빠르다(index 사용), 프로그래밍적 제어 가능 

-관계형 데이터베이스: 데이터베이스 종류 중 보편적인 db (MySQL, ORACLE, MS-SQL 등...) ps. MariaDB(최근 발전하는 db) *mariaDB는 알아둘 필요가 있겠다!


*Structured: 정돈된, 구조화된 상태

-표 == table (excel과 같은것)

-database와 excel이 다른점? 

SQL: Structured Query Language - 컴퓨터에게 구조화된 정보를 질의하는 프로그래밍 언어! 


2.데이터베이스 이론2

-MySQL client: 수업에서 사용하는 것은 MySQL monitor (기본 프로그램, 표준적인 client)

-이 monitor를 통해서 server가 어떻게 동작하는지 볼 것


*my_sql monitor 실행하는 방법

1) /opt/lam~/mysql/bin 폴더로 진입 

$ cd /opt/lamp~/mysql/bin  # lamp~는 tap을 눌러서 폴더를 지정해주면 된다.

2) 명령어 입력

$./mysql -hlocalhost -uroot -p 

3) 패스워드 입력

-본인이 기존에 설정해 놓은 (까먹으면 안된다!) 패스워드를 입력한다. 표시가 되지 않아도 입력이 되고 있는 것이다. 

-맞으면 welcome to the MySQL monitor. 라는 말들이 나온다.


*위의 명령어 설명($./mysql -hlocalhost -uroot -p)

-mysql #mysql monitor를 실행하겠다

-h: 이 뒤에 오는 것이 mysql의 주소이다 , localhost는 mysql 모니터가 설치된 자체를 가르키는 것, 곧 컴퓨터가 설치된 서버에 접속하겠다

-u: 뒤에 오는 것이 비밀번호 (root)

-p: 비밀번호를 입력 받아라라는 뜻이다. 이어서 -p**  이렇게 함께 입력해도 되지만 보안상의 문제가 있기 때문에 꼭 -p만 입력하고 추후에 비밀번호를 입력하는 것이 좋다. 



3.데이터베이스 이론3 (**)

* 원래 대/소문자를 가리지 않지만 조금 더 문법을 명확히 하고 헷갈리지 않게 하기 위해

문법적인 것: 대문자/ 문법적인 내용이 아닌 것- 소문자 로 표시하였다.


*기본적으로 맨 뒤에 ; (semi colon)을 붙여야 확인이 된다. 그냥 enter를 누르면 줄만 넘어가고 그대로 기능한다.


mysql> SHOW DATABASES;  

-현재 database들의 상태를 보여준다. 기존에 있는 information_schema, mysq, performance_schema, test는 건들지 말아야 한다. 



mysql> CREATE DATABASE opentutorials CHARACTER SET utf8 COLLATE utf8_general_ci; 

-opentutorials (이름은 자기 맘대로 설정해도 된다) 라는 새로운 database를 생성한다. 뒤의 내용은 한글 깨짐 방지를 위해 utf8로 설정해 놓은 것이다.


*본격적으로 db를 사용하기


-db 진입하기

mysql> USE opentutorials; 

-opentutorials라는 db를 사용


-table을 만들기: table을 만드는 것은 마치 엑셀시트 하나를 만드는것과 같다고 보면 된다. MySQL monitor에서는 SQL 언어를 통해서 시트를 생성한다고 생각하면 된다. 

---------------------------------------------------------

mysql> CREATE TABLE `topic`

-> `id` int(11) NOT NULL AUTO_INCREMENT, 

-> `title` varchar(100) NOT NULL,      

-> `description` text NOT NULL,

-> `author` varchar(30) NOT NULL,

-> `created` datetime NOT NULL, 

-> PRIMARY KEY(id) 

-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

---------------------------------------------------------

*아래는 각각의 코드 설명이다. 


mysql> CREATE TABLE `topic`

-topic 이라는 이름 (아무 이름이나 가능하다)의 table을 생성한다.

-grave accent key(작은따옴표랑 헷갈리면 안된다. ~ (물결) 아래에 있는 ` 를 써줘야한다)를 활용하여 text가 문법이 아니라고 알려주는 것이다.

-; (semi-colon)을 뒤에 쓰지 않았기 때문에 엔터를 눌러도 계속 이어서 써진다.

-> `id` int(11) NOT NULL AUTO_INCREMENT,

-id값은 int 라고 명시해 놓고, not null이란 말은 값이 꼭 필요하다는 뜻이다. 

-auto_increment는 뒤에 또 설명하겠지만, 자동으로 값을 순차적으로 준다는 뜻이다. 

-AUTO_INCREMENT 가 입력됨: 행이 추가 될 때마다 값이 1씩 증가하는 속성 

-수정/삭제할 행을 규정할 수 있는 가장 정확한 값은 id값


-> `title` varchar(100) NOT NULL, 

-title이라는 값은 100글자 안의 정보다라는 것을 명시한다. 100자가 넘어가면 글자가 짤린다. 

-> `description` text NOT NULL,

-description 값은 text, 즉 방대한 양의 정보를 담아도 된다는 것을 의미한다. 

-> `author` varchar(30) NOT NULL,

-author 또한 30자 이내의 글자 정보다라는 것을 명시한 것이다.

-> `created` datetime NOT NULL, 

-created는 datetime, 즉 시간-날짜 정보라는 것을 명시해주었다. 

-> PRIMARY KEY(id)   

-성능을 위해 사용하는 옵션...이라고 한다.

-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

-semi-colon을 쓰면 확인이 된다.


이제 만들어진 table을 확인해 보겠다.


mysql> show tables: 

-위에서 만들어진 table을 볼 수 있다.

-table과 엑셀의 시트는 거의 동일하다.  엑셀의 시트는 id 값에 1, 2, 3, 4와 같은 int 형식 외에 다른 형식 (four 과 같은 str)이 와도 상관 없다. 이는 나중에 데이터 분석에서 문제를 불러일으킬 수 있다. 반면 db의 table에는 꼭 지정된 값만 와야한다. 

-이런 db의 미덕은 '엄격함'이다 (값을 제한해주는 등...)


*값을 입력하기: 행/열(칼럼) 추가: 만들어진 테이블에 정보를 입력시키는 명령어다.

mysql> INSERT INTO `topic`(title, description, author, created) VALUES('about javascript', 'JavaScript is great', 'egoing', '2015-4-10 12:20:05');     

-id에는 값을 입력하지 않았다. 앞에 auto_increment를 적용시켰기 때문이다.

-value 뒤에 순서대로 값을 입력하면 내용이 추가된다. 

-문자를 입력할 때는 따옴표 (단따움표), 컬럼이나 테이블 이름은 그레이브 엑센트(`)를 쓰는 것을 헷갈리지 말자


*데이터를 가져오는 명령 (*** 매우중요): 이제 써준 데이터를 쭉 가져와보았다. 

mysql> SELECT * FROM topic;

-select: 가져온다, from 이후의 값에서... 이 사이의 *는 column 값을 넣는 것이다.

-즉 topic에서 * (전체) 를 가져온다는 명령어이다.

-* 대신 가져오고 싶은 것만 쓰면 그것만 가져온다

ex) mysql >SELECT title, author FROM topic; # title, autho만 가져오기


*데이터가 길어서 화면이 이상하게 나오는 것은 데이터가 이상한 것이 아니라 MySQL  monitor에서 제대로 보이지 않는 것 뿐이다. 이럴 땐 정보가 많은(text 형식의) description 빼고만 하면 잘 나온다. 


*기타 데이터를 select 하는 법

mysql> SELECT id, title, author, created FROM topic WHERE id=3; 

- WHERE은 뒤에 나오는 값만 가져온다. 즉 id가 3인 값을 가져오는 것


mysql> SELECT id, title, author, created FROM topic ORDER BY id DESC; 

-id 값을 descendent하게 정렬한다는 뜻, 즉 id 값을 내림차순으로 정렬한다는 것이다.