(1) 쉽다.(HTML 만큼 쉽다.)
(2) 중요하다.(관계형 데이터베이스를 다룰때 공통적으로 쓰는 언어, 압도적으로 많이 사용됨)
TableDatabase or SchemaDatabase server
Table : x축은 row,record,행(데이터의 수) / y축은 column,열(데이터의 타입)
/mysql -uroot -p #-u : user // rooot : 기본유저(관리자) // -p : 비밀번호 입력
CREATE DATABASE opentutorials; # opentutorial 라는 DATABASE 만들기
DROP DATABASE opentutorials; # opentutorial 라는 DATABASE 삭제
# 위의 두 명령어는 잘 사용할 일은 없음 필요할때마다 검색 ㄱㄱ
SHOW DATABASES # 어떤 Database가 있는지 출력
USE opentutorials # opentutorials 라는 DATABASE 사용하기
mysql cheat sheet
# 데이터 타입관련 : https://www.techonthenet.com/mysql/datatypes.php
CREATE TABLE topic(
# topic이라는 table 만듬
id INT(length) NOT NULL AUTO_INCREMENT,
# length : 어디까지 노출 시킬것인가?
# NOT NULL : 값이 없는 것을 허용하지 않는다.
# AUTO_INCREMENT : 자동으로 1씩 증가함
title VARCHAR(100) NOT NULL,
description TEXT NULL,
created DATETIME NOT NULL,
author VARCHAR(30) NULL,
profile VARCHAR(100) NULL,
PRIMARY KEY(id));
# id 를 MAIN KEY로 선언, 중복이 없어야함?
데이터베이스가 여러가지 규제 정책(length, NULL)을 가지고 있고, 그로인해 우리가 원하는 형태의 데이터베이스를 구성하는데 큰 도움을 준다.
SET PASSWORD = PASSWORD('new_password')
# 패스워드 바꾸기
: 데이터베이스가 무엇이든 간에 막론하고 가지고 있는 4가지 작업
Create(가장 중요) Read (무조건 있음) | Update Delete (없을 수 도 있음)
INSERT(Create)
SHOW TABLES; # TABLE 목록 출력
DESC topic; # topic 이라는 table 을 묘사
INSERT INTO topic(title,description ...) VALUES('MySQL','MySQL is ...' ...);
# topic 이라는 table 에 row를 추가 (Create)
SELECT * FROM topic; # topic 이라는 table 을 읽기 (Read)
SELECT id,title,description... FROM topic;
# topic 에서 id,title,description...(projection) 이라는 column 만 출력
SELECT(Read)
SELECT * FROM topic WHERE author='skh' ORDER BY id DESC LIMIT 2;
# [WHERE] topic에 author가 skh인것만 출력
# [OREDER BY] id를 역순으로 (DESC/ASC)
# [LIMIT] 출력되는 개수 2개로 제한
UPDATE
UPDATE topic SET description='Oracle is ...',title='Oracle' WHERE id=2;
# id=2 인 row의 description 과 title을 UPDATE
# WHERE 문을 빠뜨리면 재앙...
DELETE
DELETE FROM topic WHERE id=5;
# id=5 이 row 삭제
# 마찬가지로 WHERE 을 빠뜨리면 재앙.. 인생이 바뀔 수 있다?
문제의식
: 데이터가 중복? 반복하면 낭비가 생긴다. 또한 중복되지만 같은 데이터가 아닐 수 있다.
다수의 table 을 서로의 관계로 JOIN 할 수 있다.
topic_backup의 author와 profile은 중복적으로 등장할 가능성이 높기때문에 효율성을 위하여 author로 분리하였다.
topic과 author를 활용하여 topic_backup을 표현하기위해선 join을 사용하면된다.
table1 LEFT JOIN table2 ON table1.a=table2.b;
author_id와 id가 불필요하게 들어갔다 이를 제거해보자.
topic_backup과 동일한 table을 얻었다.