WHERE 안전장치

UPDATE와 DELETE에서 WHERE는 선택 문법이 아니라 피해 범위를 정하는 장치입니다.

조건이 없으면 한 행이 아니라 테이블 전체가 대상이 됩니다. 실행 전 같은 조건으로 SELECT를 먼저 돌리는 습관이 사고를 줄입니다.

위험한 실행

조건 없음
UPDATE products
SET price = 0;
ALL

테이블의 모든 상품 가격이 0으로 바뀝니다. 자동 커밋 환경이면 즉시 확정될 수 있습니다.

안전한 실행

검증 후 변경
SELECT COUNT(*)
WHERE stock = 0;

DELETE FROM products
WHERE stock = 0;
15

먼저 대상 수를 확인하고, 기대 범위 안일 때만 트랜잭션 안에서 실행합니다.

SELECT 먼저

같은 WHERE로 COUNT와 샘플 행을 확인합니다.

트랜잭션

BEGIN 후 실행하고 영향 행 수를 본 뒤 COMMIT합니다.

배치

큰 삭제는 작은 단위로 나누어 락과 로그 부담을 줄입니다.