* 프로그래머스, 타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) 5기 강의 수강 내용을 정리하는 포스팅.
* 원활한 내용 이해를 위해 수업에서 제시된 자료 이외에, 개인적으로 조사한 자료 등을 덧붙이고 있음.
데이터베이스에서 테이블의 데이터 무결성을 유지하고 유효한 데이터를 보장하기 위해 사용되는 개념.
테이블 생성 시 또는 테이블 수정 시 정의할 수 있다.
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
CREATE TABLE accounts (
account_id INT PRIMARY KEY,
balance DECIMAL(10, 2) DEFAULT 0.00
);
CREATE TABLE students (
student_id INT PRIMARY KEY,
age INT CHECK (age >= 18)
);
AUTO_INCREMENT 필드의 동작 방식을 제어하는 시스템 변수.
AUTO_INCREMENT은 새로 데이터가 생성되었을 때, DBMS에서 자동으로 숫자를 하나씩 넘겨서 저장해주는 속성.
테이블에 AUTO_INCREMENT 필드가 있을 때, 동시에 여러 트랜잭션이 삽입(INSERT) 작업을 수행하면 경합이 발생할 수 있다.
- 요청이 동시에 여럿 발생하게 되었을 때, 과연 순차적으로 1.. 2.. 3.. 순서대로 숫자가 붙을 수 있는가?에 대한 문제.
이를 제어하기 위해 MySQL은 auto_increment_lock_mode
를 사용하여 AUTO_INCREMENT 값 생성 방식과 잠금 동작을 설정할 수 있도록 되어있다.
각 컬럼은 데이터를 저장하기 위해 특정 데이터 타입(Data Type)을 정의해야 한다.
데이터 타입은 저장할 데이터의 종류와 크기를 결정한다.
INT: 정수형 데이터.
DECIMAL(M, D): 소수점이 있는 고정 소수점 데이터.
price DECIMAL(10, 2);
FLOAT, DOUBLE: 부동 소수점 데이터.
CHAR(n): 고정 길이 문자열 (n자 크기 고정).
postal_code CHAR(5);
VARCHAR(n): 가변 길이 문자열 (최대 n자).
email VARCHAR(100);
TEXT: 긴 텍스트 데이터를 저장.
birth_date DATE;
is_active BOOLEAN;
두 개 이상의 테이블을 연결하여 원하는 데이터를 하나의 결과 집합으로 결합하는 SQL 연산.
테이블 간의 관계를 기반으로 데이터를 조회할 때 사용한다.
SELECT a.name, b.order_date
FROM users a
INNER JOIN orders b ON a.id = b.user_id;
SELECT a.name, b.order_date
FROM users a
LEFT JOIN orders b ON a.id = b.user_id;
SELECT a.name, b.order_date
FROM users a
RIGHT JOIN orders b ON a.id = b.user_id;
SELECT a.name, b.order_date
FROM users a
LEFT JOIN orders b ON a.id = b.user_id
UNION
SELECT a.name, b.order_date
FROM users a
RIGHT JOIN orders b ON a.id = b.user_id;
SELECT a.name, b.product_name
FROM users a
CROSS JOIN products b;
SELECT u.name, o.order_date
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
SELECT u.name, o.order_date
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;
데브코스 과정의 첫번째 주기를 마쳤다.
아무래도 초반부이기도 하고, 이전에 개인 프로젝트들을 진행하면서 한 번 이상 공부했던 내용들이 많았어서 매우 편안한 시기이기도 했다.
다만, 역시 체계적인 커리큘럼에 따라서 백엔드를 배워나가다보니 내가 혼자 공부했을 때 놓치거나 잘못 알고있던 부분들도 많았다. 이래서 데브코스를 선택한 것이었는데, 다행히 그 선택이 옳았던 것 같다.
아는 내용이라고 해도, 구글링과 GPT를 통해 주변 지식으로 뻗어나가는 가지들을 빠짐없이 포스팅에 기록하고 있다. 단시간에 많은 내용을 다루다보니 머리가 아플 때가 있지만, 블로그 내용이 풍성해질수록 나중에 다시 되돌아보기가 쉬워지니 참 좋은 일이다.