[Database] 관계형 데이터베이스 SQL, MySQL

In-Memory

JS에서 변수를 만들어 저장한 경우, 프로그램이 종료될때 해당 프로그램이 사용하던 데이터도 사라진다. 저장한 데이터가 프로그램 실행에 의존한다.

File I/O

파일을 읽는 방식으로 작동하는 형태이다.
단점

  • 데이터가 필요할 때마다 전체 파일을 매번 읽어야 한다.
  • 파일이 손상되거나 복잡하고 데이터량이 많아질수록 데이터를 불러들이는 작업이 점점 힘들어진다.

ACID

데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안전성을 보장하기 위해 필요한 성질이다.

예를 들어 은행에서 예금을 송금를 하는 트랜젝션일 경우 금액이나 고객의 이름 등 모든 연산이 성공해서 송금하거나 하나의 연산이라도 실패하면 모두 실패해 송금을 막아야 한다.

ACID의 성질은 다음과 같다.

Atomicity (원자성)

하나의 트랜잭션에 속해있는 모든 작업이 전부 성공하거나 전부 실패해서 결과를 예측할 수 있어야 한다.

Consistency (일관성)

트랜잭션이 일어난 이후 데이터베이스의 상태는 이전과 같이 유효해야 한다.

Isolation (격리성)

모든 트랜잭션은 다른 트랜잭션으로 부터 독립되어야 한다.

Durability (지속성)

하나의 트랜잭션이 성공하면 해당 트랜잭션에 대한 로그가 남아야 한다.
만약 런타임 오류나 시스템 오류가 발생하더라도, 해당 기록은 영구적이어야 한다.

관계형 데이터베이스 (Relational Database)

하나의 CSV파일이나 엑셀 시트를 한개의 테이블로 저장할 수 있다.
한번에 여러 개의 테이블을 가질 수 있기 때문에 데이터를 불러오기 수월하다.

SQL (Structured Query Language)

데이터베이스 용 프로그래밍 언어중 하나로, 주로 관계형 데이터베이스에서 사용한다.

데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있다.
SQL을 사용하기 위해서는 데이터의 구조가 고정되어 있어야 한다.
데이터 구조가 고정되어 있지 않은 데이터베이스를 NoSQL이라 한다.

  • 테이블의 구조에 데이터 타입 등을 사전에 정의
  • 정의된 내용에 맞는 형태의 데이터만 삽입 가능
  • 테이블 간의 관계를 직관적으로 파악 가능

SQL 기반의 관계형 데이터베이스를 사용하는 케이스

  • 데이터베이스의 ACID 성질을 준수해야 하는 경우
  • 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우

대표적인 관계형 데이터베이스: MySQL, Oracle, SQLite, PostgreSQL

NoSQL (Non Structured Query Language)

주로 데이터가 고정되어 있지 않은 데이터베이스를 가리키는 용어로, 스키마가 반드시 없는 것은 아니며 NoSQL은 데이터를 읽어올 때 스키마에 따라 데이터를 읽어 온다.
데이터를 입력하는 방식에 따라, 데이터를 읽어올 때 영향을 미친다.

NoSQL 기반의 비관계형 데이터베이스 구성들

  • Key-Value 타입
  • Document 데이터베이스
  • Wide-Column 데이터베이스
  • Graph 데이터베이스

NoSQL 기반의 비관계형 데이터베이스를 사용하는 케이스

  • 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우
  • 클라우드 컴퓨팅 및 저장 공간을 최대한 활용하는 경우
  • 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트하는 경우

대표적인 NoSQL: MongoDB, Casandra

MySQL

설치 (macOS)

사전에 homebrew가 설치되어 있어야 한다.
프롬프트에 다음과 같이 입력한다.
brew install mysql

서비스 시작 (macOS)

프로그램을 실행해야 사용할 수 있다.
실행하기 위해 다음과 같이 입력한다.
brew services start mysql

접속

비밀번호 설정 전 접속
mysql -u root
비밀번호를 설정한 후 접속
mysql -u root -p

로그인이 잘 되지 않는 경우

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourPassword';

SQL 문법

Table

데이터베이스는 대부분 하나 이상의 Table을 포함한다.
각 Table은 이름으로 식별된다.

데이터베이스에서 수행해야 하는 대부분의 작업은 SQL 문으로 수행된다.

record

데이터베이스에서 하나의 단위로 취급되는 자료의 집합
하나의 레코드는 가로방향으로 한줄이기도 하다.
행(row)라 한다.

연산자 (operator)

연산자설명
=같다
>보다 크다
<보다 작다
>=보다 크거나 같다
<=보다 작거나 같다
<>다르다 (몇몇 버전 SQL에서는 != 연산자를 사용한다)
BEETWEEN특정 범위 사이
LIKE패턴을 찾는다
INcolumn에 복합적인 값을 지정한다

SQL reference: W3schools SQL

Sprint

SHOW DATABASES; 
// 모든 데이터베이스의 정보 확인

USE database_name; 
// 해당 데이터베이스 사용

SHOW TABLES; 
// 모든 테이블 정보 확인

DESC table_name; 
// 해당 테이블 구조 확인

SELECT * FROM table_name; 
// 해당 테이블의 모든 데이터 확인

SELECT table_name.calumn1 FROM table_name 
// 해당 테이블의 해당 calumn1 데이터만 확인

SELECT * FROM table_name WHERE table_name.calumn1='kim'; 
// 해당 테이블에서 특정 조건을 만족하는 데이터 찾기 (조건: calumn1의 value가 'kim'이다.)

SELECT * FROM table_name AS byname WHERE byname.calumn1='kim';
// AS로 별칭을 만들수 있다.

INSERT INTO table_name (calumn1, ...) VALUES (value1,...); 
// 해당 테이블에 데이터 추가

UPDATE table_name SET table_name.calumn1='value';
// 해당테이블 calumn1의 value 수정

SELECT table1.column1 FROM table1
INNER JOIN table2 ON table1.column4 = table2.column7;
// table1에서 column1에서 조건에 맞는 record와 table2에서 조건에 맞는 record 리턴
// (조건: table1의 column4과 table2의 column7중에서 동일한 value)

SELECT table1.column1 FROM table1
LEFT JOIN table2 ON table1.column4 = table2.column7;
// table1에서 column1의 모든 record와 table2에서 조건에 맞는 record 리턴
// (조건: table1의 column4과 table2의 column7중에서 동일한 value)

SELECT table1.column1 FROM table1
RIGHT JOIN table2 ON table1.column4 = table2.column7;
// table1에서 column1에서 조건에 맞는 record와 table2의 모든 record 리턴
// (조건: table1의 column4과 table2의 column7중에서 동일한 value)

좋은 웹페이지 즐겨찾기