김데이의 개발공부

[ TIL ] Day 57 - SQL 데이터 관리 (테이블 생성/삭제, CRUD 작업 등) 본문

코드잇 Node.js(BE) 부트 캠프/TIL (Today I Learn) 📑

[ TIL ] Day 57 - SQL 데이터 관리 (테이블 생성/삭제, CRUD 작업 등)

theday365 2025. 12. 15. 18:55
반응형

🗓️ 수업 일자 : 2025.12.15

✨ 오늘의 수업 평가 :  [ HARD ]  ⚡🧠💣 머리 과부하 ⚡🧠💣

 

사실 SQL 수업은 힘들지 않았는데,

이전 미션 모범답안 보면서 현타가 와서 멘탈 와사삭...

내가 만든 코드가 너무 못나보여서 너무 속상하다..

어디부터 잘못 됬는지도 모르겠고, 잘 하고 있는 건지도 모르겠고.. 

 

 

👩‍💻 [개인 / 팀 프로젝트] 오늘 작업 내용 💻
- SQL 데이터 검색 고급 문제 풀이

- 스프린트 미션 6 제출 🤗

 

📝  오늘 배운 내용  

- 데이터베이스 이론

- SQL 테이블 & 데이터 작업하기

 


1. 데이터베이스 이론

1) 데이터베이스(Database)

 

  • 의미: 데이터들의 큰 저장소
  • 역할: 여러 테이블을 묶어서 관리
  • 비유: 엑셀 파일 묶음 폴더 📂

 

 

2) 스키마(Schema)

 

  • 의미: 데이터베이스 안의 구조 설계도
  • 역할: 어떤 테이블이 있고, 컬럼·관계가 어떻게 생겼는지 정의
  • 비유: 엑셀 파일의 시트 구성 설계 📃

 

 

3) 테이블(Table)

 

  • 의미: 실제 데이터가 들어있는
  • 역할: 행(Row)과 열(Column)로 데이터 저장
  • 비유: 엑셀 시트 하나 📊 

 

 

데이터 활용하기 (사진 출처 : Unsplash의Carlos Muza)
데이터 활용하기 (사진 출처 : Unsplash의Carlos Muza)

 

 

 

 

 

2.  SQL 테이블 & 데이터 작업하기

테이블 생성 / 삭제하기

1) 테이블 생성

  • 명령어 : CREATE TABLE 테이블명 ( 테이블 내용 작성 );
  • 테이블 내용은 라인 한 개에 [필드명 데이터타입 속성(필요 시 작성)] 구조로 선언
  • 항목 사이에 띄어쓰기 한칸 작성하고, 새로운 필드 작성 시 콤마로 줄 바꿈

 

2) 테이블 삭제 

  • 명령어 : DROP TABLE 테이블명;
-- 테이블 생성하기
CREATE TABLE products (

  id SERIAL PRIMARY KEY, 
  - SERIAL(= AUTOINCREMENT, AI() ) : 1부터 시작하는 정수가 들어감. 자동으로 +1 됨
  - PRIMARY KEY : 고유 식별자를 선언 
   
  name text UNIQUE NOT NULL, 
  - UNIQUE : 각 로우마다 고유한 값을 가져야 함을 명시, 제약 조건
  - NOT NULL : 해당 칸은 옵셔널이 아님
  
  price int,
  company text,
  weight real,
  description text,
  - int : 정수형 숫자
  - text : 문자열
  - real : 실수형 숫자
  
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW(),
  - TIMESTAMPTZ : 시차가 적용 된 타임라인 사용
  - DEFAULT 지정값 : 자동으로 입력 할 값 지정
  - NOW() : 지금 시간
  
  deleted_at timestamp DEFAULT NULL
  - soft delete 하기 위한 컬럼
);

-- 테이블 삭제하기
DROP TABLE products;

 

 

기본 CRUD 문법 

[Create] 
INSERT INTO 테이블명(컬럼명 순서대로) VALUES (값 순서대로);
INSERT INTO products (name, price, company) VALUES ('곰인형', 15000, '인형나라(주)');


[Read] 데이터 조회 방식 사용
SELECT * FROM products WHERE id = 1;
SELECT * FROM products ORDER BY id DESC;

[Update]
UPDATE 테이블명 SET 컬럼명 = 바꿀 값 WHERE 로우 고유 값;
UPDATE products SET description = '귀여운 곰인형', weight=1.25, updated_at = now() WHERE id = 1;
-- 직접 입력하여 작성하는 경우, updated_at 시간도 직접 입력하여 업데이트 해야 함

[Delete]
DELETE FROM 테이블명; -- 모든 로우 제거
DELETE FROM 테이블명 WHERE 로우 고유 값; -- 특정 로우 제거 
DELETE FROM products;
DELETE FROM products WHERE id = 1;

 

 

HARD Delete VS SOFT Delete

- HARD Delete : 물리적으로 완전 삭제 하는 것, 데이터 복구가 안됨.

- SOFT Delete : Delete 컬럼에 값을 입력하여 삭제한 것처럼 처리하는 것. 추후 데이터 복구 가능.
                          현재 시간을 입력하고, 데이터 조회 시 Delete IS NULL 값만 조회하면 삭체 처리 한 값은 보이지 않음

                          삭제 표기 : UPDATE users SET deleted_at = now() WHERE id = 1; 

                          삭제 표기 해제 : UPDATE users SET deleted_at = null WHERE id = 1;

 

 

테이블 컬럼 추가

-- 컬럼 추가
ALTER TABLE 테이블명 ADD COLUME 컬럼명 데이터타입 속성(필요한 경우);
ALTER TABLE products ADD COLUME madeIn text;
-- products 테이블에 madeIn 컬럼을 추가하는데, 데이터 타입은 text

ALTER TABLE products
ADD COLUMN types category_enum NOT NULL DEFAULT 'etc'; 
-- products 테이블에 types 컬럼을 추가하는데, 데이터 타입은 category_enum 값을 사용하고 
-- 빈 값 허용 안되기 때문에 (=NOT NULL) 기본값으로 'etc'
-- [ NOT NULL 설정 + DEFAULT 설정 ] 두 설정은 꼭 함께 해주어야 함 


-- 컬럼 삭제
ALTER TABLE products DROP COLUMN types;


-- 추가+  enum 타입 생성하기 
CREATE TYPE enum명칭 AS ENUM (값으로 사용 할 명칭들); 
CREATE TYPE category_enum AS ENUM ('doll', 'toy', 'etc');

 

 


 

📃 내일은 뭘 배울까 🤔

- SQL Constraint, Transaction,  Rollback

반응형