DB

[MySQL] DELETE + WHERE 조건으로 안전하게 데이터 삭제하는 방법 총정리

인생아 2025. 7. 2. 13:43
반응형

MySQL에서 DELETE 문을 사용할 때 가장 중요한 포인트는 바로 WHERE 조건이다.
조건이 없으면 테이블 전체 데이터를 삭제하게 되고, 조건이 잘못되면 필요한 데이터를 지우지 못하게 된다.

✅ DELETE + WHERE 조건 기본 구조

MySQL에서 조건부 삭제는 다음과 같은 형식으로 작성한다.

DELETE FROM 테이블명
WHERE 조건;

이 구문은 조건에 해당하는 행만 삭제하므로, 매우 정밀하게 데이터를 다룰 수 있다.

✅ 단일 조건 예제

DELETE FROM users
WHERE status = '탈퇴';

users 테이블에서 status 값이 '탈퇴'인 사용자만 삭제한다.
데이터 정제 작업이나 휴면 사용자 정리 등에 자주 사용된다.

반응형

✅ 숫자 조건 사용

DELETE FROM orders
WHERE amount < 1000;

주문 금액이 1000원 미만인 주문 데이터를 삭제한다.
불필요한 테스트 주문, 오입력 데이터 제거 시 유용하다.

✅ 날짜 조건 활용

DELETE FROM logs
WHERE created_at < '2023-01-01';

2023년 이전의 로그 데이터를 삭제하여 디스크 공간 최적화에 기여할 수 있다.

✅ 여러 조건 조합 (AND / OR)

DELETE FROM products
WHERE category = '테스트' AND stock = 0;

조건을 AND, OR로 조합하면 훨씬 정교한 삭제가 가능하다.

DELETE FROM users
WHERE status = '탈퇴' OR last_login IS NULL;

탈퇴했거나 로그인 이력이 없는 사용자를 모두 삭제한다.

반응형

✅ IN 조건으로 다중값 필터링

DELETE FROM employees
WHERE department_id IN (3, 5, 7);

복수 조건을 간결하게 표현할 수 있어 실무에서 많이 사용되는 방식이다.

✅ BETWEEN 조건 사용

DELETE FROM events
WHERE event_date BETWEEN '2022-01-01' AND '2022-12-31';

특정 기간 내의 데이터를 삭제할 때 사용된다.

✅ LIKE 조건으로 텍스트 필터링

DELETE FROM comments
WHERE content LIKE '%광고%';

내용 중 '광고'라는 단어가 포함된 댓글만 제거한다.
스팸 필터링 또는 불량 콘텐츠 정리에 자주 쓰인다.

✅ IS NULL / IS NOT NULL 조건

DELETE FROM accounts
WHERE email IS NULL;

이메일 주소가 없는 계정을 정리할 수 있다.
NULL은 일반적인 비교 연산자(=, !=)가 아니라 IS NULL을 반드시 사용해야 한다.

반응형

✅ 조건에 맞는 행이 있는지 확인하는 방법

삭제하기 전 반드시 SELECT로 조건을 먼저 검증하는 습관이 중요하다.

SELECT * FROM users WHERE status = '탈퇴';

정상적으로 조건이 작동하는지 확인한 뒤에 삭제한다.

DELETE FROM users WHERE status = '탈퇴';

✅ 영향 받은 행 수 확인

삭제 직후 ROW_COUNT() 또는 affected_rows()로 삭제된 행 수를 알 수 있다.

SELECT ROW_COUNT();

특히 프로그래밍 언어나 트랜잭션 처리 시 중요한 체크 포인트이다.

✅ 실무 활용 팁: 안전한 DELETE 흐름

  1. 삭제 대상 조건을 SELECT로 먼저 점검한다
  2. DELETE FROM 테이블명 WHERE 조건 실행
  3. ROW_COUNT()로 결과 검증
  4. 트랜잭션이 필요한 경우 START TRANSACTION → COMMIT 사용

이렇게 4단계로 습관화하면 실수 없는 DELETE 쿼리 실행이 가능해진다.

✅ 실수 예방: WHERE 없이 DELETE 하지 말자

DELETE FROM users; -- 모든 데이터 삭제됨!!

이와 같은 쿼리는 되돌릴 수 없기 때문에 반드시 조심해야 한다.
특히 MySQL 클라이언트에서는 safe_updates 모드를 활성화하면 WHERE 없이 삭제가 차단된다.

SET SQL_SAFE_UPDATES = 1;

✅ 공식 문서 참고 링크

반응형