누구나 쉽게 데이터를 정리정돈 할 수 있는 전문적인 소프트웨어 : database
MySQL : 무료, 오픈소스, 관계형 데이터베이스의 기능 대부분을 가짐.
아래 내용은 DATABASE3 수업을 통해 학습하자.
스프레드 시트와 데이터베이스의 차이를 통해 데이터베이스의 목적이 무엇인지 학습하자.
win + R
누르고 cmd
실행하기.> cd c:\Bitnami\wampstack-8.0.12-0\mariadb\bin
> mysql -uroot -p
입력하면 mysql 비밀번호 입력하는 게 나옴. 비밀번호 입력하면 실습 준비 끝!데이터베이스를 사용하는 데 얻는 이점 중 하나 : 보안
서버 접속(3강과 중복 내용 있음)
win + R
누르고 cmd
실행하기.
> cd c:\Bitnami\wampstack-8.0.12-0\mariadb\bin
> mysql -uroot -p
입력하면 mysql 비밀번호 입력하는 게 나옴. 비밀번호 입력하면 서버 접속 성공
비밀번호 있었다면 검색어: mysql password forgot
CREATE DATABASE opentutorials
DROP DATABASE opentutorials
SHOW DATABASES;
USE opentutorials;
데이터 베이스를 넘어서 스키마를 넘어서 테이블, 표를 만들 과정!
이제 SQL(Structured Query Language) 언어를 배움
SQL의 특징 : 쉽다, 중요하다
표(table): x축과 y축으로 쪼개서 생각함.
테이블 생성 관련 검색어 : create table in mysql cheat sheet -> 이미지 검색으로 보기.
테이블 하나하나에 넣는 데이터의 type을 제한하는 법 관련 검색어: mysql datatype number
code
CREATE TABLE topic(
-> id INT(11) NOT NULL AUTO_INCREMENT, //id는 열에 오는 값. (11)은 보여질 때 몇개만큼만 보여지는지(노출정도). NOT NULL은 공백 허용 안함. AUTO_INCREMENT는 열 추가시 자동으로 +1씩 숫자가 증가하게 하는 설정.
-> title VARCHAR(100) NOT NULL, // VARCHAR(숫자)에서 숫자는 문자열을 한정시키는 숫자. VARCHAR는 한정된 문자열만큼 끊어서 데이터를 넣는 기능을 함.
-> description TEXT NULL, // TEXT는 VARCHAR보다 더 많은 문자열을 수용함. NULL은 공백값 허용
-> created DATETIME NOT NULL, // DATETIME은 날짜와 시간.
-> author VARCHAR(30) NULL,
-> profile VARCHAR(100) NULL,
-> PRIMARY KEY(id)); // PRIMARY KEY()는 중복되지 않는 고유한 값을 가져야 하는 걸 지정해야 할 때 사용하며 topic 테이블의 id 컬럼이 메인임을 알림. 성능적인 측면과 중복방지 측면에서 좋은 기능.
데이터베이스의 규제 정책 덕분에 데이터를 깔끔하게, 우리가 원하는 방식으로 정리할 수 있음.
테이블 확인: DESC topic;
내용을 추가하는 법 관련 검색어: mysql create row
INSERT INTO 테이블명(컬럼명,컬럼명,..) VALUES(컬럼에 따른 값,컬럼에 따른 값,..);
코드
INSERT INTO topic(title,description,created,author,profile) VALUES('MYSQL','MySQL is...',NOW(),'egoing','developer');
작성한 내용 확인하는 법 관련 검색어: how to read row in mysql
코드
SELECT * FROM topic;
SELECT = 데이터를 읽는 것.
모든 데이터 화면에 표시: SELECT * FROM topic;
한정된 컬럼만 표시: SELECT id,title,created,author FROM topic;
SELECT와 관련된 문법 검색어: mysql select syntax
기본문법: SELECT coloums이름;
값이 egoing인 열만 보고 싶으면 SELECT id,title,created,author FROM topic WHERE author='egoing';
정렬 기능: id 기준으로 내림차순 정렬 SELECT id,title,created,author FROM topic WHERE author='egoing' ORDER BY id DESC;
노출 제한 걸기: 코드 제일 끝에 LIMIT 2(노출할 수);
UPDATE topic SET description='Oracle is...', title='Oracle' WHERE id=2;
DELETE FROM topic WHERE id = 5;
지금 여기가 수업의 정상!
데이터베이스라는 말 자체 : 본질(CRUD)
관계형 데이터베이스 : 혁신
-> 지금까지의 수업보다 조금 더 어렵고 복잡함. 이제부터는 이 관계형 데이터베이스에 접근할 것.
중복되는 데이터는 개선할 여지가 있음. 왜냐면 데이터가 수천수만개로 커질 때 중복으로 인한 오류가 생길 수 있고 유지 보수가 힘들 수 있기 때문.
저장은 분산해서, 보여줄 땐 합쳐서 보여지는 것이 중요. 직관성이 있고 중복으로 인한 오류 및 유지보수의 어려움을 타파할 수 있기 때문에.
다음 강의에 우리가 할 것 -> 서로 다른 두 테이블을 하나로 합치는 것!
기존의 테이블 확인: SHOW TABLES;
테이블 이름 변경: RENAME TABLE topic to topic_backup;
새롭게 테이블 2개를 만들고 (topic과 author), author의 id값을 서로 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);
SELECT * 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;
폰 노이만: 수학은 이해하는 것이 아니라 익숙해지는 것이다
database server 를 알기 전 인터넷에 대해 알아야함.
데이터베이스도 이처럼 클라이언트와 서버가 나누어져있음.
데이터베이스 서버를 다룰 때, 어떠한 형태이든 간에 데이터베이스 클라이언트를 통해야만 함.
우리는 지금까지 MySQL monitor라는 명령어 기반의 데이터베이스 클라이언트 프로그램을 통해 데이터베이스 서버에 접근해 데이터를 쓰고 읽고 수정하고 삭제했음.
하나의 DB 서버에 여러 클라이언트들이 접근해 데이터를 활용할 수 있음.
이러한 개념이 어려워도 걱정말자. 모든 건 이해하는 게 아니라 익숙해지는 거!
MySQL Workbench는 GUI 기반의 클라이언트 프로그램. 시각적으로 접근하기 편하지만 프로그래머에 따라 이 기능을 사용하지 않는 게 있어 쓰이는 장소가 한정적임.
검색: mysql client
-> 여러 mysql 클라이언트 프로그램을 알 수 있음.
mysql에 접근할 때 코드:
mysql -uroot -p -h도메인주소 또는 아이피 또는 개인컴이면 localhost 또는 127.0.0.1
h 생략시 기본적으로 로컬호스트 가리킴.
자신에게 맞는 mysql 클라이언트를 찾는것이 중요하다.
SQL의 CRUD 중 R이 굉장히 까다로움. 익숙해지기 위해서 많은 연습이 필요함.
데이터가 많아지면 필요한 정보를 꺼내기가 어려움. index를 통해 정리정돈이 필요함.
데이터베이스에도 index 이용 가능. 검색으로 관련 내용 찾아보자!