C.W.K.
Stream
Lesson 05 of 16 · published

UPDATE 와 DELETE 안전하게

~12 min · queries, write

Level 0스키마 새싹
0 XP0/86 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

가장 위험한 두 statement

UPDATE 와 DELETE 가 WHERE 빼먹으면 테이블 모든 행 영향. 진짜 팀이 진짜 돈 잃은 적 있음. 규율은 단순하고 외울 가치.

4 단계 안전 패턴

  1. 트랜잭션 열기: BEGIN;
  2. 같은 WHERE 로 SELECT; 행 수 + 샘플 확인.
  3. UPDATE/DELETE 실행.
  4. 다 맞으면 COMMIT; — 아니면 ROLLBACK;.

RETURNING 이 변경된 거 정확히 보여줌

UPDATE/DELETE 에 RETURNING * (또는 명시 컬럼) 추가하면 같은 라운드트립에 영향받은 행 봄. Audit log 와 '맞는 거 일어났나' sanity check 에 무가.

Code

UPDATE 패턴·sql
-- Single row, single column
UPDATE users SET role = 'admin' WHERE id = 7;

-- 여러 컬럼 한번에
UPDATE products
SET price = price * 1.10,
    updated_at = now()
WHERE category = 'electronics';

-- subquery 와 UPDATE
UPDATE orders
SET status = 'vip-priority'
WHERE customer_id IN (
    SELECT id FROM customers WHERE lifetime_spend > 10000
);
DELETE 패턴·sql
DELETE FROM sessions WHERE expires_at < now();

-- join 모양 조건 DELETE
DELETE FROM cart_items
WHERE user_id IN (
    SELECT id FROM users WHERE deleted_at IS NOT NULL
);
트랜잭션 + RETURNING 안전 패턴·sql
BEGIN;
SELECT id, name, role FROM users WHERE last_login < now() - INTERVAL '1 year';
-- 47 행. 맞아 보임.
DELETE FROM users
WHERE last_login < now() - INTERVAL '1 year'
RETURNING id, name;
-- 반환 행 검토.
COMMIT;  -- 또는 이상하면 ROLLBACK;

External links

Exercise

4 단계 패턴 연습: BEGIN, SELECT preview, UPDATE/DELETE + RETURNING, COMMIT. 샌드박스 테이블에서 destructive 연산; commit 안 하고 ROLLBACK; 데이터 안 변한 거 확인.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.