한양과학기술고등학교

에듀테크 프로젝트 대시보드

INSERT / UPDATE / DELETE

RETURNING INSERT SELECT UPDATE FROM DELETE USING

데이터를 바꾸는 세 문장. PostgreSQL 은 RETURNING 으로 바뀐 행을 즉시 돌려줍니다.

1. INSERT

INSERT INTO students (name, grade) VALUES ('김한양', 1)
RETURNING id, created_at;                 -- 방금 생성된 값 회수

INSERT INTO students (name, grade)
VALUES ('이한양', 1), ('박한양', 2), ('최한양', 3);   -- 다중행

INSERT INTO students_archive
SELECT * FROM students WHERE graduated;   -- 쿼리 결과를 삽입

2. UPDATE

UPDATE students SET grade = grade + 1 WHERE graduated = false
RETURNING id, grade;

-- 다른 테이블 값으로 갱신 (UPDATE ... FROM)
UPDATE exams e
SET class_id = s.class_id
FROM students s
WHERE s.id = e.student_id AND e.class_id IS NULL;

3. DELETE

DELETE FROM exams WHERE exam_date < '2020-01-01' RETURNING id;

-- 조인 삭제 (DELETE ... USING)
DELETE FROM exams e
USING students s
WHERE s.id = e.student_id AND s.graduated;

TRUNCATE exams;                    -- 전체 삭제 (빠름, WHERE 불가, 시퀀스 유지)
TRUNCATE exams RESTART IDENTITY CASCADE;

4. 안전 습관

실수 방지
  • WHERE 없는 UPDATE/DELETE 는 전체 행에 적용됨
  • 먼저 같은 WHERE 로 SELECT count(*) 해보기
  • psql 에서 BEGIN; → 실행 → 결과 확인 → COMMIT 또는 ROLLBACK
"EXPLAIN ANALYZE 없이 성능을 논하지 마라"