DB(Database)는 데이터들의 묶음이다.
DB를 사용하기 이전에는 In-Menory방식과 File I/O 방식을 이용하여 데이터를 다뤘는데, 이는 데이터의 보전성과 성능면에서 치명적이었다. 따라서 DB사용이 보편화되었다.
SQL을 기반으로 하고, 테이블의 구조와 데이터 타입등을 미리 정의하고 정의된 내용을 바탕으로만 데이터의 삽입이 가능하다. 이로인해 테이블 간의 관계를 직관적으로 파악할 수 있다.(스키마가 뚜렷하게 보인다.)
ex) MySQL, Oracle, SQLite, PostgresSQL, MariaDB
NoSQL을 기반으로 하고, 데이터가 고정되어 있지 않은 DB를 가르킨다. 관계형과 다르게 데이터를 읽어올 때 스키마에 따라 읽어온다.
이런 방식을 'schema on read'라고 한다.
ex) 몽고DB, Casandra
JavaScript, Java, Python....등 쓰임새에 맞게 개발언어가 존재하는 것처럼 DB에서 사용하는 언어가 존재한다. 이를 SQL(Structured Query Language)이라 한다.
말 그래도 구조화된 쿼리 언어인데, 여기서 쿼리는 질의문을 뜻한다고 보면 된다. 즉, 구조화된 질의문을 통해 DB에서 원하는 데이터를 가져오는 것이다. 이는 데이터의 구조가 고정되어 있는 DB에서만 사용이 가능하다.
몇가지의 문법만 알면 원하는 데이터를 쏙쏙 뽑아올 수 있다.
CREATE DATABASE 데이터베이스이름;
USE 데이터베이스이름;
SHOW DATABASES;
DROP DATABASE 데이터베이스이름;
CREATE TABLE 테이블이름(
컬럼 타입 속성,
컬럼 타입 속성,
.
.
);
DESCRIBE 테이블이름;
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '데이터베이스이름'
Where: 조건문이라고 이해할 수 있다. 원하는 조건을 걸때 사용(필터문)
And, Or, Not
Order By : 기본 오름차순 DESC(내림차순)
Limit: 결과로 가져올 데이터의 갯수를 지정. 쿼리문 맨 마지막에서 사용
Distinct: 중복제거하고 모두 추출
Insert Into: table에 데이터 넣기
Null Values
Update
Delete
Count
Like
Wildcards
Aliases
Joins
Inner Join
Left Join
Right Join
Group By
쿼리문 작성 순서:
CRUD명령어 -> FORM절 -> WHERE절 -> GROUP BY -> HAVING -> ORDER BY
쿼리문 실행 순서
1. FROM invoices: invoices 테이블에 접근을 합니다.
2. WHERE CustomerId >= 10: CustomerId 필드가 10 이상인 레코드들을 조회합니다.
3. GROUP BY CustomerId: CustomerId를 기준으로 그룹화합니다.
4. HAVING SUM(Total) >= 30: Total 필드의 총합이 30 이상인 결과들만 필터링합니다.
5. SELECT CustomerId, AVG(Total): 조회된 결과에서 CustomerId 필드와 Total 필드의 평균값을 구합니다.
6. ORDER BY 2: AVG(Total) 필드를 기준으로 오름차순 정렬한 결과를 리턴합니다.
트랜잭션(Transaction)이란 여러개의 작업을 한 단위로 묶어놓은 것이다. 단위 안에 모든 작업들이 완료되야 비로소 정상적으로 종료한다.
즉, 하나라도 실패하면 트랜잭션도 실패고, 모두 성공일 때만 트랜잭션 또한 성공이다.
🤔 왜 이런 실행 묶음 단위가 필요할까??
.
.
트랜잭션이 없는 경우를 생각해보자.
내가 회사에서 일을 하고 월급을 받을 때,
회사에서는 먼저 나에게 월급만큼의 돈을 출금한다 -> 내 계좌에 입금한다.
이럴 때, 둘 중 하나의 작업만 완료된다면, 회사는 회사대로 돈을 잃게 되고, 나는 나대로 월급을 받지 못하게 된다. 😱
그래서 모두가 성공해야 작업이 완벽하게 완료되는 단위인 트랜잭션이 필요한 것이다.
ACID란 Atomicity Consistency Isolation Durability의 약자로, 트랜잭션의 안정성을 보장하기 위해 필요한 성질을 뜻한다.
데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티간의 관계에 대한 설명 ( = 데이터베이스 도면 )
PrimaryKey: 테이블의 기본키로(Primary Key) 자동으로 증가하는 값을 가진다.
ForeignKey: 외래키라 읽고, 다른 테이블의 기본키를 참조한 키이다.
보통 N의 테이블에 외래키로 1의 pk를 참조한다.
1 : N
'일대 다'라고 보통 읽고, 테이블관의 관계를 수로 표현한 것이다.
N : N
한 학생이 여러수업을 듣는다
한 수업을 여러학생이 듣는다.
각각의 pk를 참조하는 하나의 테이블을 생성한다. -> 1:N을 두번사용한 개념으로 join테이블이라 볼 수 있다. join테이블에도 반드시 pk가 존재해야 한다.
자기참조 관계
테이블 내에서의 관계를 의미한다. 일반적으로 테이블내에서 일대다 의 관계가 되는 경우는 다른 테이블을 사용하여 표현한다