DATABASE

생활코딩 - DATABASE2 MySQL

joy_lee 2021. 4. 12. 21:15

file은 사용하기 쉽고 어디에나 있고 전송하기 편리 / 정보를 저장
file만으론 정보를 효과적으로 CRUD(추가,수정,삭제,읽기) 하기 어려움

DB: 누구나 쉽게 데이터를 정리 정돈할 수 있는 전문적인 SW

관계형 데이터베이스: 데이터를 표의 형태로 정리정돈 가능, 정렬 검색 빠르고 편리, 안전

MySQL: 관계형 데이터베이스의 주요한 기능을 대부분 가지는 데이터베이스 시스템
무료이며 오픈소스 -> 웹과함께 폭발적인 동반 성장

 

 

데이터베이스의 목적

 

스프레드시트와 데이터베이스

공통점 : 자료를 표의 형태로 표현. 비슷한 기능을 사용할 수 있다.

차이점 : 스프레드시트 - 클릭으로 제어 / 데이터베이스 - 코딩(컴퓨터언어)로 제어

 

의미있는 데이터들은

웹에 공유, 빅데이터나 인공지능 통해 분석 등 여러가지로 활용할 수 있다.

 

MySQL의 구조

표(table): 데이터를 기록하는 장소

표들이 많아지면... 그 표들을 연관된 것들끼리 구분해야 할 필요가 생긴다.

홈페이지의 글, 댓글, 회원정보 들을 각각 표에 저장한다.

데이터베이스(스키마): 관계가 있는 표들을 묶어서 구분하기 위해 그룹으로 나눈 것

데이터베이스 서버: 데이터베이스(스키마)들이 저장된 공간 = MySQL

데이터베이스의 장점

보안 : 자체적인 보안체계를 가짐. 안전하게 데이터 보관 가능

권한기능 : 유저들을 등록해 특정 권한만 부여하도록 설정할 수 있음

 

SQL

컴퓨터 언어의 한 종류.

Structured 구조화된 데이터(표 형태)

Query 데이터베이스에게 요청

Language 언어

 

SQL의 특징

1. 쉽다.

2. 중요하다.(수많은 RDB에서 사용되는 표준화된 언어)

 

table의 구조

row : data 자체

column : data의 구조 

 

 

 

1. 테이블의 생성

datatype은 용도에 맞는 형식을 지정하는 것이 좋다.(무조건 큰 데이터형식 X, 메모리를 많이사용, 느려질 수 있음)

 

처음에 datatype을 지정하는 이유

전문가가 아닌 수많은 사용자들이 직접 데이터를 입력하는 시스템에서는 형식에 맞지 않은 값을 입력할 수도 있다.

처음부터 형식을 지정해두면 맞지 않는 형식의 값을 입력했을 때 오류를 띄워서 막을 수 있다.

 

테이블 만들기

 

목표

id title description created author profile
1 MySQL MySQL is... 2021-01-10 joy developer
2 ORACLE ORACLE is... 2021-01-12 egoing developer
3 SQL Server SQL Server is... 2021-02-21 duru database administrator
4 PostgreSQL PostgreSQL is... 2021-02-29 taeho data scientist, developer
5 MongoDB MongoDB is... 2021-03-22 egoing developer

 

코드

1
2
3
4
5
6
7
8
create table topic(
  id int(11not null auto_increment,
  title varchar(100not null,
  description text null,
  created datetime not null,
  author varchar(30null,
  profile varchar(100null,
  primary key(id));
cs

 

create table table이름 (

    column이름 형식,

    column이름 형식,

    column이름 형식,

    primary key(column이름));

 

not null : 값이 입력되지 않으면 안됨

auto_increment : 숫자들이 하나씩 증가하도록 함

primary key(column) : 데이터별 고유한 값으로 정하는 column, 중복을 막는다.

 

MySQL의 데이터형식들

www.w3schools.com/sql/sql_datatypes.asp

 

SQL Data Types for MySQL, SQL Server, and MS Access

SQL Data Types for MySQL, SQL Server, and MS Access The data type of a column defines what value the column can hold: integer, character, money, date and time, binary, and so on. SQL Data Types Each column in a database table is required to have a name and

www.w3schools.com

desc topic;

을 통해 테이블의 구성을 확인할 수 있다.

 

 

2. Create : SQL의 INSERT 구문

1
insert into topic (title, description, created, author, profile) values('MySQL''MySQL is...'2021-01-10'joy''developer');
cs

insert into table_name (column_name) values(value);

column_name의 순서에 맞게 value를 작성해줘야 한다.

id는 auto_increment이기 때문에 따로 작성해주지 않아도 자동으로 입력해준다.

 

다른 row 도 insert를 통해 입력해주었다

SELECT * FROM topic; 을 통해 확인한 topic table

 

 

 

3. Read : SQL의 SELECT 구문

SELECT (projection/표현되어야할 column들) from (table name);

1
select id,title,created,author from topic;
cs

 

SELECT를 통해 보고싶은 자료들만 골라서 나타낼 수 있다.

 

WHERE : 보고싶은 row의 조건

1
SELECT id,title,author FROM topic WHERE author='egoing';
cs

ORDER BY : 정렬 조건( ASC(기본,오름차순) | DESC(내림차순) )

LIMIT : 개수 제한(데이터의 수가 많아질수록 SELECT * 는 사용하지 않는 것이 좋다. 출력하는데 시간이 너무 많이 걸림. row의 수의 제한을 두는 것이 좋다.)

 

1
SELECT id,title,author FROM topic WHERE author='egoing' ORDER BY id DESC LIMIT 1;
cs

 

4. UPDATE : SQL의 UPDATE 구문

1
UPDATE topic SET description='Oracle is ...', title='Oracle' WHERE id=2;
cs

UPDATE (table) SET (column_name=value) WHERE (row 조건);

* WHERE 이후를 쓰지 않으면 모든 row의 내용이 (column_name=value) 으로 바뀐다. 주의할것!

 

 

 

5. DELETE: SQL의 DELETE 구문

DELETE FROM (table) WHERE (row)

1
DELETE FROM topic WHERE id = 5;
cs

id = 5인 row가 사라진 table.

 

DELETE도 WHERE 부터 적지 않으면 모든 row가 사라지므로 주의하도록 한다.

 

 

관계형 데이터베이스의 필요성

데이터 베이스에 중복된 데이터가 있으면 데이터가 적을 땐 상관 없지만 많아지면 문제가 생긴다.

  • 기술적, 경제적으로 손실이 생긴다
  • 데이터를 수정해야할 때, 같은 데이터를 한꺼번에 수정할 수 없어서 번거롭다.
  • 데이터의 구분이 어려워진다.(데이터 내용이 많으면 한 눈에 보기 힘들다)

데이터 중복을 막기 위해 표를 나눠서 저장한다면

  • 장점 : 저장시 용량을 줄일 수 있다. 유지보수가 쉽다.
  • 단점 : 자료를 한 눈에 보기 힘들어 직관적이지 않다.

데이터베이스는 저장은 따로, 볼 때는 합쳐서 볼 수 있도록 도와준다!

 

 

지금까지 봤던 topic을 topic과 author로 나눠서 저장할 수 있다.

topic에는 author에 대한 정보 대신 author_id가 있고, author_id로 author에서 정보를 찾을 수 있다.

 

 

관계형 데이터베이스의 JOIN

JOIN을 통해 두 테이블을 하나로 합쳐서 볼 수 있다.

ON 뒤에는 어떤 값을 기준으로 합쳐줄 것인지 알려주어야 한다.

topic의 author_id 가 author의 id와 같은 값이라고 알려준다.

1
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id;
cs

author_id와 id는 데이터를 찾을 때 필요하지만 굳이 표시할 필요는 없으므로 SELECT * 대신 보고싶은 column들만 명시해준다.

 

1
SELECT topic.id, title, description, created, name, profile FROM topic LEFT JOIN author ON topic.author_id = author.id;
cs

주의할 점은 topic에도 id가 있고, author에도 id가 있으므로 SELECT id FROM...으로 작성하면 MySQL은 error를 출력한다.

topic.id로 topic에 있는 id라고 알려줘야 한다.

합쳐진 테이블에서 id값이 topic의 id값이라고 명시하고 싶으면 따로 이름을 바꿔줄 수 있다.

(원래이름) AS (새로운이름)

1
SELECT topic.id AS topic_id, title, description, created, name, profile FROM topic LEFT JOIN author ON topic.author_id = author.id;
cs

이렇게 자료를 저장했을 때, author의 내용만 바꿔도 author의 자료를 가져다 보여주는 표 전체의 내용이 바뀐다.

하나를 바꾸면 전체가 바뀐다!

 

인터넷과 데이터베이스

인터넷

  • client에 해당되는 컴퓨터가 server에 해당되는 컴퓨터에게 정보를 요청하고 응답하며 동작하는 시스템.

  • 인터넷이 동작하기 위해서 필요한 컴퓨터의 수 : 최소 2대(client, server)
  • client : 서버에 정보를 요청한다 / server : client가 원하는 정보를 응답한다.
  • 각각 흩어져있는 컴퓨터들이 인터넷으로 연결되며 컴퓨터간의 사회가 만들어졌다.
  • 웹의 경우: web client(web brouser), web server

데이터베이스

  • 데이터베이스는 database client와 database server로 이루어져있다.
  • database server는 data를 저장하는 곳이고, 사람이 컴퓨터언어로 입력, 수정, 출력 등의 명령어를 사용하는 곳이 database client이다. 사용하면서 한 프로그램처럼 보이지만 실제로는 client와 server로 나누어져 있다.

 

MySQL Client

크게 명령어기반, GUI기반으로 나눌 수 있다.

명령어기반 : 명령어를 알아야 사용할 수 있다. 어디에서든 실행이 가능하고, 처리속도가 빠르다.

GUI기반 : 직관적으로 사용할 수 있다. 실행 후 기다려야 한다.

많은 서버 컴퓨터들이 가진 자원을 최대한 서버 자체에 사용하기 위해서 GUI기능을 지원하지 않는 경우가 많다.

자신에게 맞는 client 프로그램을 사용하면 된다.

 

* 그래픽으로 실행하지만 결국은 SQL문을 만들어 서버에 전달하는 것이다.

 

 

강의 사이트 : opentutorials.org/course/3161

MySQL online site : sqlfiddle.com/