본문 바로가기
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

먼저 같은 WHERE로 미리 봐

UPDATE와 DELETE는 조건이 없으면 모든 행을 바꿔. 실행 전에 같은 WHERE를 SELECT에 붙여 대상 행 수와 표본을 확인하고, 결과가 맞을 때만 쓰기 문장으로 바꿔.

트랜잭션 안에서 확인해

BEGIN;으로 시작해 변경을 실행하고 결과를 살핀 뒤 맞으면 COMMIT;, 아니면 ROLLBACK;해. RETURNING *을 붙이면 바뀌거나 지워진 행을 즉시 볼 수 있어.

조건 없는 문장을 경계해

UPDATE users SET role = 'admin';DELETE FROM users;는 문법상 완전히 유효하고 모든 행에 적용돼. 도구와 검토 절차가 이를 위험한 동작으로 취급하도록 만들어.

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

BEGIN, SELECT 미리보기, RETURNING을 붙인 UPDATE나 DELETE, COMMIT의 4단계를 연습해. 샌드박스 테이블에서 삭제 작업을 실행한 뒤 COMMIT 대신 ROLLBACK하고 데이터가 바뀌지 않았는지 확인해.

Progress

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

댓글 0

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

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