SQL
SQL이란?
SQL(Structured Query Language)은 데이터베이스 언어로 주로 관계형 데이터베이스에서 사용하며 구조화된 쿼리 언어라고 할 수 있습니다.
SQL은 아래와 같은 언어적 특성을 갖습니다.
- 대소문자를 구분하지 않는다. (서버 환경이나 DBMS 종류에 따라 데이터베이스 또는 필드명에 대해 구분하기도 한다.)
- 반드시 세미콜론(;)으로 끝나야 한다.
- 고유의 값은 따옴표(’’)로 감싸줘야 한다.
- 객체를 나타낼 때는 백틱(``)으로 감싸줘야 한다.
- 한 줄 주석은 문장 앞에 --를 붙여서 사용하고 여러 줄 주석은 /* */로 감싸준다.
SQL의 종류
- 데이터 정의어 (DDL; Data Definition Language) 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어
CREATE, ALTER, DROP, RENAME, TRUNCATE - 데이터 조작어(DML; Data Manipulation Language) 데이터베이스에 데이터를 저장할 때 사용되는 명령어
INSERT, UPDATE, DELETE, SELECT - 데이터 제어어(DCL; Data Control Language) 데이터베이스, 테이블의 접근권한이나 CUD 권한을 정의하는 명령어
GRANT, REVOKE
SQL 기본 문법
- 데이터베이스 생성, 사용
CREATE DATABASE 데이터베이스_이름;
USE 데이터베이스_이름
- 테이블 생성
CREATE TABLE user (
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(255),
email varchar(255)
);
- 테이블 정보 확인
DESCRIBE 테이블_이름;
- 테이블 데이터 추가
INSERT INTO 테이블_이름 (column1, column2, ...)
VALUES (데이터1, 데이터2, ...);
--모든 열에 데이터를 채워넣는 경우
INSERT INTO 테이블_이름
VALUES (데이터1, 데이터2, ...);
- 데이터 확인
SELECT 특성_1
FROM 테이블_이름
WHERE 특성_1 = "값";
- 데이터 정렬(ORDER BY)
SELECT *
FROM 테이블_이름
ORDER BY 특성_1; 혹은 ORDER BY 특성_1 DESC;
- 데이터 갯수 제한(LIMIT)
SELECT *
FROM 테이블_이름
LIMIT 200;
- 고유 값들만 확인(DISTINCT)
SELECT DISTINCT 특성_1
FROM 테이블_이름
트랜잭션(Transaction)
트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛입니다.
각 트랜잭션은 하나의 특정 작업으로 시작해 묶여 있는 모든 작업들을 다 완료해야 정상적으로 종료합니다.
데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있습니다.
ACID
ACID란 데이터베이스 내에서 일어나는 하나의 트랜잭션의 안전성을 보장하기 위해 필요한 성질을 말합니다.
- Atomicity(원자성)
하나의 트랜잭션에 속해있는 모든 작업이 전부 성공하거나 실패해서 결과를 예측할 수 있어야 합니다. 특정 쿼리를 실행했는데 부분적으로 실패하는 부분이 있다면 전부 실패하도록 구현되어 있습니다.
- Consistency(일관성)
데이터베이스의 상태가 일관되어야 한다는 성질입니다. 하나의 트랜잭션 이전과 이후 데이터베이스의 상태가 같아야 합니다.
- Isolation(격리성, 고립성)
모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 합니다.
- Durability(지속성)
하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야 합니다.
만약 런타임 오류나 시스템 오류가 발생하더라도 해당 기록은 영구적이어야 한다는 뜻입니다.
SQL vs. NoSQL
데이터베이스는 크게 관계형 데이터베이스와 비관계형 데이터베이스로 구분되는데 관계형 데이터베이스는 SQL을 기반으로, 비관계형 데이터베이스는 NoSQL로 데이터를 다룹니다.
관계형 데이터베이스는 행(row)과 열(column)로 구성된 테이블에 데이터를 저장합니다. 특정한 형식을 지키기 때문에 데이터를 사용할 때 매우 수월하며 테이블 간의 관계를 직관적으로 파악할 수 있습니다.
비관계형 데이터베이스는 데이터가 고정되어 있지 않은 데이터베이스를 가리킵니다. 관계형 데이터베이스에서 데이터를 스키마에 맞게 입력해야 한다면, 비관계형 데이터베이스에서는 스키마에 따라 데이터를 읽어옵니다.
NoSQL
NoSQL 기반의 비관계형 데이터베이스는 보통 다음과 같이 구성됩니다.
- Key-Value 타입: 속성을 Key-Value의 쌍으로 나타내는 데이터를 배열의 형태로 저장합니다.
- 문서형 데이터베이스: 데이터베이스를 테이블이 아닌 문서처럼 저장하는 데이터베이스를 의미합니다.
- Wide-Column 데이터베이스: 데이터베이스의 열(column)에 대한 데이터를 집중적으로 관리하는 데이터베이스입니다. 하나의 행에 많은 열을 포함할 수 있어서 유연성이 높기 때문에 규모가 큰 데이터 분석에 주로 사용됩니다.
- 그래프 데이터베이스: 자료구조의 그래프와 비슷한 형식으로 데이터 간의 관계를 구성하는 데이터베이스입니다.
SQL 기반 데이터베이스와 NoSQL 데이터베이스의 차이점
상황에 맞는 선택
SQL 기반의 관계형 데이터베이스는 데이터베이스의 ACID 성질을 준수해야 하는 경우, 금융 서비스를 위한 소프트웨어 개발, 데이터가 구조적이고 일관적인 경우 사용합니다.
NoSQL 기반의 관계형 데이터베이스는 데이터 구조가 거의 없는 대용량의 데이터를 저장하는 경우, 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우, 데이터 구조를 자주 업데이트 하는 경우 사용합니다.
'CodeStates_BE_44 > TIL' 카테고리의 다른 글
[Spring] Spring Framework (0) | 2023.03.31 |
---|---|
[DB] 데이터베이스 설계 (0) | 2023.03.29 |
[네트워크] HTTP (0) | 2023.03.27 |
[네트워크] 웹 애플리케이션 작동 원리 (0) | 2023.03.24 |
Day 18. [Java] 스레드, JVM (0) | 2023.03.10 |