SQL(Structured Query Language)
- 관계형 데이터 베이스를 만드는 프로그래밍 언어
- 데이터베이스에
요청(query)
을 보내 데이터를 가져오거나, 삽입 할 수 있다.
- 구조화 된 쿼리 언어라는 뜻을 가지는데, 이는
SQL
의 데이터가 스키마(Schema)
를 통해 어떤 표(Table)
의 모양으로 구조화 되어있기 때문이다.
왜 필요할까?
JS
에서는 변수나 함수등의 데이터를 In-Memory
방식으로 저장하는데, 이는 프로그램이 종료되면 사라지는 휘발성 데이터이다.
- 이는 돌발상황에서의 데이터 보호가 어렵고, 프로그램이 작동하지 않는 시간에는 원하는 데이터를 받아 올 수 없다.
- 위의 대체재로
CSV
나 엑셀시트
같은 파일을 사용할 수는 있지만, 원하는 하나의 데이터를 가져오기 위해 파일을 전부 읽어들여야 하며, 파일이 손상된 경우나 여러 파일을 동시에 다뤄야한다면 작업이 힘들어진다.
- 위의 한계를 개선하기 위해
SQL
을 사용한다.
Table
field 1 | field 2 | field 3 |
---|
record 1 | record 1 | record 1 |
record 2 | record 2 | record 2 |
- SQL에서 어떤 데이터들을 저장한 표이며, 하나의 데이터베이스는 다수의 테이블을 포함한다.
- 테이블을 만들기 위해서는 각 열이 가지는 이름과 데이터 타입을 지정해주어야 하며, 이를
필드(field)
혹은 컬럼(column)
이라고 한다.
- 각각의 필드에 들어간 값들을 가지는 행을
레코드(record)
혹은 튜플(Tuple)
이라고 한다.
- 저장된 값들을
데이터
라고 한다.
- 각각의 레코드들은
키(Key)
를 가질 수 있으며, 해당 값은 중복되지 않는 고유한 값이여야한다.
→ 보통 id
로 많이 사용한다.
- 이렇게 지정된
Key
를 내부키(Primary Key)
라고 하며, 이는 외부 테이블에서 외래키(Foreign Key)
로써 참조 될 수 있다.
스키마(Schema)
스키마(Schema)
란, 위키백과에 따르면 아래와 같은 정의를 가진다.
데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조.
- 그냥, 쉽게 이해하자면 DB내부의 테이블들의 구조와 관계를 표현하는 것 이라고 봐도 좋을 듯 하다.
DB와 데이터 테이블을 만드는 과정
create database 데이터베이스 이름;
으로 데이터베이스를 생성한다.
use 데이터베이스 이름;
으로 해당 데이터베이스를 선택한다.
create table 테이블이름 (필드이름 데이터타입 옵션, ...);
으로 테이블과 필드를 지정한다.
insert into (필드이름1, 필드이름2, ...) values (데이터1, 데이터2, ...)
로 해당 필드에 맞는 값을 입력한다.
ACID
Transaction
- 데이터 베이스의 상태를 변경시키는 기능을 수행하기 위한 하나 이상의 쿼리를 모아둔 하나의 작업 단위
→ 일종의 알고리즘으로 생각해 볼 수 있겠다.
ACID
- 트랜젝션이 발생할 때, 그 안정성을 보장할 수 있는 성질
- Atomicity (원자성)
- 하나의 트랜젝션 안에서는 모든 연산이 성공하던지 실패하여야한다.
- 한쪽에서만 성공하거나, 한쪽에서만 실패하면 안된다.
→ 이 경우 다시 결과를 돌려놔야 한다.(일종의 롤백)
- Consistency (일관성)
- 하나의 트랜젝션 전후에 데이터베이스의 일관된 상태가 유지되어야 함.
- 어떤 데이터 내부에 A라는 이름의 값을 가지는데, 갑자기 해당 데이터베이스에 A가 없는 데이터를 추가해서는 안된다.
→ 이 경우 다른 데이터들은 A를 가지지만, 추가된 데이터는 A가 없는 상황이 된다.(불가)
- Isolation (고립성)
- 각각의 트랜젝션은 독립적이며, 트랜젝션이 서로에게 영향을 줄 경우 실패한 것으로 간주한다.
→ A와 C로 데이터를 전달하는데, C에 의해 A의 데이터가 변경되거나 하는 경우
- Durability (지속성)
- 하나의 성공된 트랜젝션에 대한 로그는 영구적으로 기록된다.
→ 이미 성공된 내용을 영구적으로 저장한다는 것
→ 금융 혹은 주식같은 전자상거래 환경에서 중요하게 지켜져야 한다.