JavaScript에서 데이터를 다룰 때에는 프로그램이 실행될 때만 존재하는 데이터가 있다. 변수를 마들어 저장한 경우 프로그램이 종료될 때 해당 프로그램이 사용하던 데이터도 사라진다.
즉, 에기치 못한 상황으로부터 데이터를 보호할 수 없고, 프로그램이 종료된 상태라면 데이터를 원하는 시간에 받아올 수 없으며, 데이터의 수명이 프로그램의 수명에 의존하게 된다.
파일을 읽는 방식으로 작동하는 형태를 칭한다. 엑셀이나 csv 같은 파일의 형태는 In Memory에서 보다 데이터 저장이 적절해 보이지만 한계가 존재한다.
관계형 데이터베이스에는 하나의 CSV파일이나 엑셀 시트를 한 개의 테이블로 저장이 가능해져 위와 같은 단점을 해결 가능.
하나의 언어인 Structured Query Language(SQL)은 데이터베이스 언어로, 주로 관계형 데이터베이스에서 사용한다.
SQL은 구조화된 쿼리 언어이다.
쿼리는 '질의문' 이라는 뜻을 가지고 있다. 예를 들면 검색을 할 때 입력하는 검색어가 일종의 쿼리이다.
SQL이란 데이터베이스 용 프로그래밍 언어이다. 데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있다.
또 SQL은 구조화된 SQL과 구조화가 되지 않은 NoSQL으로 나뉘게 되고 NoSQL의 대표적인 예시는 MongoDB와 같은 문서 지향 데이터베이스이다.
SQL을 사용하기 위해서는 데이터가 구조가 고정되어 있어야한다.
CREATE DATABASE 데이터베이스_이름;
USE 데이터베이스_이름;
데이터베이스를 이용해 테이블을 만들거나 수정하거나 삭제하는 등의 작업을 하려면, 먼저 데이터베이스를 사용해야 하는 명령을 전달해야 한다.
아래는 user라는 테이블을 만드는 예제이다.

CREATE TABLE user(
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(255),
email varchar(255)
);
CRE인TE TABLE 테이블명() 을 이용해 테이블을 생성할 수 있었다. 필드 선언부는 int,varchar을 이용해 각 조건을 충족시켜서 생성할 수 있었다.
DESCRIBE user;
해당 코드를 이용하여 아래와 같이 테이블 정보를 확인할 수 있다.
mysql> describe user;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
SELECT 'hello world'
일반 문자열
SELECT 2
숫자
SERLECT 15+3
연산
SELECT 특성_1
FROM 테이블_이름
-> 특성_1을 테이블에서 사용
SELECT 특성_1,특성2
FROM 테이블_이름
->특성 1,2을 테이블에서 사용
SELECT *
FROM 테이블_이름
-> 테이블의 모든 특성을 선택
SELECT 특성_1,특성_2
FROM 테이블_이름
WHERE 특성_1 = "특정_값"
-> 특성_1,특성_2를 사용하여 테이블에서 특성_1의 특정 값과 동일한 데이터 찾기
SELECT 특성_1,특성_2
FROM 테이블_이름
WHERE 특성_2 <> "특정_값"
-> 특성_1,특성_2를 사용하여 테이블에서 특성_2의 특정 값을 제외한 데이터 찾기
SELECT 특성_1,특성_2
FROM 테이블_이름
WHERE 특성_1>"특정 값"
SELECT 특성_1,특성_2
FROM 테이블_이름
WHERE 특성_1<="특정 값"
->테이블에서 특성_1에서 특정 값보다 크거나 , 작거나 같은 데이터 값을 출력
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 LIKE "%특정 문자열%"
-> 테이블에서 특성_2와 특정 문자열이 비슷한 값들을 필터하여 데이터로 출력
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 IN ("특정값_1", "특정값_2")
->리스트의 값들과 일치하는 데이터 값들을 출력
SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NULL
->값이 없는 경우 NULL을 찾을 때는 IS 사용
SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NOT NULL
->값이 없는 NULL을 제외할 때에는 NOT을 추가
SELECT *
FROM 테이블_이름
ORDER BY 특성_1
-> 테이블에서 특성_1을 기준으로 오름차순하여 출력
SELECT *
FROM 테이블_이름
ORDER BY 특성_1 DESC
->테이블에서 특성_1을 기준으로 내림차순하여 출력
SELECT *
FROM 테이블_이름
LIMIT 200
데이터 결과를 200개만 출력.
SELECT DISTINCT 특성_1
FROM 테이블_이름
-> 특성_1을 기준으로 중복을 제거한 데이터들을 출력
SELECT *
FROM 테이블_1
JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
-> 모든 열에서 테이블_1을 선택해 테이블 2와 ON 조건에 해당하는 데이터들을 출력
트랜잭션은 데이터 베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 수행되어야할 일련의 연산들을 의미한다.
각 트랜잭션은 하나의 특정 작업으로 시작을 해 묶여 있는 모든 작업들을 다 완료해야 정상적으로 종료한다. 성공 또는 실패라는 두 개의 결과만 존재하는 트랜잭션은 미완료된 작업없이 모든 작업을 성공을 해야 성공적인 트랜잭션이라고 볼 수 있다.
ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션의 안정성을 보장하기 위해 필요한 성질이다.
원자성은 하나의 트랜잭션에 속해있는 모든 작업이 전부 성공하거나 전부 실패해서 결과를 예측할 수 있어야 한다.
예를 들어, A,B 작업을 수행해야 하는데 A트랜잭션은 성공했고 B트랜잭션은 실패했다고 가정하면, 초기 시작인 A트랜잭션부터 다시 실행해야 하는데 이를 원자성이라고 볼 수 있다.
원자성을 충족했다라고 하면, A,B 두 트랜잭션 모두 성공으로 결과가 나타나야 한다.
일관성은 데이터베이스의 상태가 일관되어야 한다. 하나의 트랜잭션 이전과 이후, 데이터베이스의 상태는 이전과 같이 유효해야 한다.
즉, 트랜잭션이 일어난 이후의 데이터베이스는 데이터베이스의 제약이나 규칙을 만족해야 한다.
일관성을 위반하는 예시를 들면, '모든 고객은 반드시 이름을 가지고 있어야 한다'는 데이터베이스의 제약이 있다고 가정하면,
위 예시는 '이름이 있어야한다'라는 데이터베이스의 제약을 위반하여, 일관성을 유지되지 않는 상태가 된다.
격리성은 모든 트랜젹션은 다른 트랜잭션으로부터 독립되어야 한다.
예를 들어 계좌에 만 원이 있다고 가정하면,
지속성은 하나의 트랜잭션이 성공적으로 수행되었으면, 해당 트랙잭션에 대한 로그가 남아야 한다.
런타임 오류나 시스템 오류가 발생해도, 해당 기록은 영구적이어야 한다.