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 흐름
- 삭제 대상 조건을 SELECT로 먼저 점검한다
- DELETE FROM 테이블명 WHERE 조건 실행
- ROW_COUNT()로 결과 검증
- 트랜잭션이 필요한 경우 START TRANSACTION → COMMIT 사용
이렇게 4단계로 습관화하면 실수 없는 DELETE 쿼리 실행이 가능해진다.
✅ 실수 예방: WHERE 없이 DELETE 하지 말자
DELETE FROM users; -- 모든 데이터 삭제됨!!
이와 같은 쿼리는 되돌릴 수 없기 때문에 반드시 조심해야 한다.
특히 MySQL 클라이언트에서는 safe_updates 모드를 활성화하면 WHERE 없이 삭제가 차단된다.
SET SQL_SAFE_UPDATES = 1;
✅ 공식 문서 참고 링크
'DB' 카테고리의 다른 글
| [MySQL] DELETE + EXISTS / IN 조건으로 정밀하고 안전하게 데이터 삭제하기 ✂️ (0) | 2025.07.02 |
|---|---|
| [MySQL] DELETE + 서브쿼리로 조건에 맞는 데이터만 정밀하게 삭제하는 방법 (0) | 2025.07.02 |
| [MySQL] DELETE + JOIN으로 두 테이블 이상에서 조건에 맞는 데이터 안전하게 삭제하는 방법 (0) | 2025.07.02 |
| [MySQL] DELETE + LIMIT / ORDER BY로 원하는 개수만 안전하게 삭제하는 방법 (2) | 2025.07.02 |
| [MySQL] DELETE 기본 문법 총정리 – 안전하게 데이터 삭제하는 법 (1) | 2025.07.02 |
| [MySQL] UPDATE 실패 원인과 해결법 완전 정복 – 수정이 안될 때 확인할 모든 것 (2) | 2025.07.01 |
| [MySQL] UPDATE 트랜잭션 적용하기: 데이터 무결성을 지키는 안전한 수정 전략 (1) | 2025.07.01 |
| [MySQL] UPDATE 문에서 NULL 처리하는 방법 완전 정리 (0) | 2025.07.01 |