SQL로 데이터 관리하기

권나현·2025년 7월 17일
post-thumbnail

학습 목표 요약

  • 데이터베이스 및 테이블 생성/삭제

  • 기본 CRUD 문법

  • 테이블 구조 수정 (ALTER TABLE)

  • 제약 조건(Constraints)

  • 외래 키(Foreign Key)

  • 트랜잭션(Transaction)과 롤백(Rollback)

1. 데이터베이스와 테이블

1-1. 데이터베이스 생성 및 삭제

CREATE DATABASE example_db;
CREATE DATABASE IF NOT EXISTS example_db;
DROP DATABASE example_db;
  • IF NOT EXISTS: 중복 방지

1-2. 테이블 생성 시 유의사항

  • snake_case 사용 권장

  • 주석은 -- (한 줄), /* */ (여러 줄)

CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(100) UNIQUE,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

2. 기본 CRUD 문법

2-1. 데이터 조회 (READ)

SELECT * FROM users;
SELECT * FROM users WHERE id = 1;

2-2. 데이터 추가 (CREATE)

INSERT INTO users (name, email) VALUES ('코드잇', 'codeit@example.com');

2-3. 데이터 수정 (UPDATE)

UPDATE users SET email = 'new@example.com' WHERE id = 1;

2-4. 데이터 삭제 (DELETE)

DELETE FROM users WHERE id = 1;
DELETE FROM users;  -- 모든 데이터 삭제

2-5. Soft Delete (논리적 삭제)

UPDATE users SET deleted_at = NOW() WHERE id = 1;
  • deleted_at 컬럼으로 삭제 여부를 구분

3. 테이블 수정: ALTER TABLE

3-1. 열 추가 및 삭제

ALTER TABLE users ADD COLUMN role VARCHAR(10) DEFAULT 'user';
ALTER TABLE users DROP COLUMN is_active;

3-2. ENUM 타입 사용

CREATE TYPE user_role_enum AS ENUM ('user', 'admin', 'moderator');
ALTER TABLE users ADD COLUMN role user_role_enum NOT NULL DEFAULT 'user';

4. 제약 조건 (Constraints)

제약 조건설명예시
NOT NULLNULL 값 허용 안 함이름, 이메일 등
UNIQUE중복 허용 안 함주민등록번호
PRIMARY KEY테이블 고유 식별자 (NOT NULL + UNIQUE)사용자 ID
FOREIGN KEY다른 테이블의 PRIMARY KEY 참조주문 → 사용자 ID
CHECK특정 조건 만족해야 함나이 ≥ 0
DEFAULT값 없을 때 기본값 사용등록일 = 현재시간

5. 외래 키 (Foreign Key)

  • 다른 테이블의 키를 참조하여 데이터의 무결성 유지
FOREIGN KEY (user_id) REFERENCES users(id)
  ON DELETE CASCADE;

5-1. ON DELETE / ON UPDATE 옵션

옵션설명
CASCADE부모 삭제 시 자식도 삭제
SET NULL부모 삭제 시 자식 키 NULL 처리
RESTRICT (기본값)부모 삭제 거부

6. 트랜잭션 & 롤백

  • 여러 쿼리를 하나의 작업 단위로 묶어 처리
BEGIN;

-- 여러 쿼리 실행

ROLLBACK; -- 문제가 생기면 되돌림
COMMIT;   -- 모두 성공 시 확정
  • 예: 주문 등록 중 한 단계 실패 시 전체 작업 취소

7. 복습 정리

-- DB
CREATE DATABASE db_name;
DROP DATABASE db_name;

-- 테이블
CREATE TABLE table_name (...);
DROP TABLE table_name;

-- CRUD
INSERT INTO table (...);
SELECT * FROM table;
UPDATE table SET ... WHERE ...;
DELETE FROM table WHERE ...;

-- ALTER
ALTER TABLE table ADD COLUMN ...;
ALTER TABLE table DROP COLUMN ...;

-- 제약조건
ALTER TABLE table ADD CONSTRAINT constraint_name CHECK (...);

-- 외래키
FOREIGN KEY (col) REFERENCES other_table(id) ON DELETE CASCADE;

-- 트랜잭션
BEGIN;
ROLLBACK;
COMMIT;
profile
node.js 백앤드 개발자가 되기 위한 Study Vlog

0개의 댓글