SpreadSheet, 관계형 DB 공통점: data를 '표'의 형태로 저장해주는 공통점.
관계형 DB는 컴퓨터 언어를 통해서 제어할 수 있다는 차이점이 있다.
데이터베이스를 사용한다면
- 파일보다 보안이 좋다 (자체 보안 체계를 가지고 있음)
- 권한체계 (여러 계정 권한별로 만들고 관리할 수 있다)
./mysql -u[사용자] -p[패스워드]
로 '데이터베이스 서버'에 접속할 수 있음 (ex. ./mysql -uroot -p111111)
- '데이터베이스 서버'에 접속했다면 이제 '데이터베이스(스키마)'를 마주한 것이다!!
서버에 접속했다면 mysql>
이라는 cmd가 뜬다!
[mysql create database]라고 검색해보자
- CREATE DATABASE 데이터베이스이름;
이라고 하면 된단다
[mysql delete database]라고 검색해보자
- DROP DATABASE 데이터베이스이름;
이라고 하면 된단다
[How to show database list in mysql]라고 하면
- SHOW { DATABASES | SCHEMAS }
이라고 하면 된대
USE 데이터베이스이름
- 지금부터의 모든 명령은 해당 데이터베이스 내부 표에 대해서 작용할거다
표를 만드는 방법을 아는 방법
- 참고로 '데이터베이스(스키마)' 에 들어가서 (USE사용) 만들어야 되는거임 알았지?
- [create table in mysql]이라 검색하면 다 나옴 -> CREATE TABLE
syntax
- [create table in mysql cheat sheet]이라 검색하면 정리정돈된 자료가 많이 나올거임 (여러 분야에서 활용 가능)
column별로 이름, 타입, 옵션을 설정해줘야 함
CREATE TABLE 표이름
-> 표 만드는 키워드
각 column당 데이터가 저장되는 '형식을 강제'할 수 있다 / [mysql data type number]라고 검색해보자
id 열을 만들때는
- 뒤에 NOT NULL
이라고 쓰면 '값이 없음을 허용하지 않는다'라는 의미,
- 뒤에 AUTO_INCREMENT
라고 하면 자동으로 값이 1씩 증가하게 됨
- id INT(11) NOT NULL AUTO_INCREMENT
title 열을 만들 때는
- title VARCHAR(100) NOT NULL
description 열을 만들 때는
- NULL
은 '값이 없는 것을 허용한다' 라는 의미
- description TEXT NULL
Primary Key
- '성능'과 '중복'
- 가장 중요한 column, 식별자가 되는 column 을 설정하는 것
- 여기선 'id'를 식별자로 하려고 했으니 PRIMARY KEY(id)
CREATE TABLE topic ( //엔터 치기전에;를 입력하지 않으면 줄바꿈이 됨
id INT(11) NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
description TEXT NULL,
created DATETIME NOT NULL,
author VARCHAR(30) NULL,
profile VARCHAR(100) NULL,
PRIMARY KEY(id)
);
USE
를 이용해 데이터베이스에 접근SHOW TABLES
하면 테이블 리스트를 볼 수 있음DESC 표이름
하면 해당 표를 볼 수 있음INSERT INTO 표이름 (column이름1, 이름2, 이름3, ...) VALUES(해당 열의 내용1, 내용2, 내용3, ...)
NOW( )
를 사용할 수 있음SELECT \* FROM 표이름
SELECT column이름1,이름2,이름3, ... FROM 표 이름
SELECT column이름1,이름2,이름3, ... FROM 표이름 WHERE column이름='X'
SELECT column이름1,이름2,이름3, ... FROM 표이름 ORDER BY column이름 DESC
SELECT column이름1,이름2,이름3, ... FROM 표이름 LIMIT 2
저장은 분산, 출력은 합쳐서
topic>
id | title | desc | author | profile | |
---|---|---|---|---|---|
1 | a | a is ... | egoing | developer | |
2 | b | b is ... | egoing | developer | |
3 | c | c is ... | abba | developer, CEO |
author>
id | name | profile |
---|---|---|
1 | egoing | developer |
2 | abba | developer, CEO |
3 | egoing | developer |
topic>
id | title | desc | author_id |
---|---|---|---|
1 | a | blah blah ... | 1 |
2 | b | blah blah ... | 1 |
3 | c | blah blah ... | 2 |
-> author의 수정, 구분에 더 장점이 생겼다
-> 직관성이 조금 떨어졌다 (trade-off)
JOIN
에 관해서는 아래에서 살펴보자JOIN
을 위한 실습 자료--
-- Table structure for table `author`
--
CREATE TABLE `author` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`profile` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
);
--
-- Dumping data for table `author`
--
INSERT INTO `author` VALUES (1,'egoing','developer');
INSERT INTO `author` VALUES (2,'duru','database administrator');
INSERT INTO `author` VALUES (3,'taeho','data scientist, developer');
--
-- Table structure for table `topic`
--
CREATE TABLE `topic` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(30) NOT NULL,
`description` text,
`created` datetime NOT NULL,
`author_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);
--
-- Dumping data for table `topic`
--
INSERT INTO `topic` VALUES (1,'MySQL','MySQL is...','2018-01-01 12:10:11',1);
INSERT INTO `topic` VALUES (2,'Oracle','Oracle is ...','2018-01-03 13:01:10',1);
INSERT INTO `topic` VALUES (3,'SQL Server','SQL Server is ...','2018-01-20 11:01:10',2);
INSERT INTO `topic` VALUES (4,'PostgreSQL','PostgreSQL is ...','2018-01-23 01:03:03',3);
INSERT INTO `topic` VALUES (5,'MongoDB','MongoDB is ...','2018-01-30 12:31:03',1);
JOIN
RDB를 RDB답게 해주는 키워드
SELECT \* FROM topic LEFT **JOIN author**
SELECT \* FROM topic LEFT JOIN author **ON topic.author_id = author.id**
//topic의 author_id와 author의 id를 이어서 붙여줘SELECT **id**,title,description,created,name,profile FROM topic LEFT JOIN author ON topic.author_id = author.id
SELECT **topic.id**,title,description,created,name,profile FROM topic LEFT JOIN author ON topic.author_id = author.id
SELECT **topic.id AS topic_id**,title,description,created,name,profile FROM topic LEFT JOIN author ON topic.author_id = author.id
Internet과 Database의 관계