프로그래밍/MySQL

📊 [SQL] 제40장 DELETE(2) - 여러 개의 데이터를 한 번에 삭제할 수 있을까요?

강릉바다의 블로그 2026. 7. 15. 19:37

제40장. DELETE (2)

"여러 개의 데이터를 한 번에 삭제할 수 있을까요?"


학습 목표

이번 장을 학습하면 다음 내용을 할 수 있습니다.

  • 여러 행(Row)을 한 번에 삭제할 수 있다.
  • 다양한 조건과 함께 DELETE를 사용할 수 있다.
  • DELETE 후 영향을 받은 행(Row)의 개수를 확인할 수 있다.
  • 안전하게 DELETE를 실행하는 방법을 설명할 수 있다.

지난 시간을 떠올려 봅시다.

지난 시간에는

한 개의 데이터를 삭제하는 방법을 배웠습니다.

DELETE FROM Customers
WHERE CustomerID = 100;

이번에는 조금 다른 상황을 생각해 보겠습니다.

"시험용으로 입력한 고객이 30명 있습니다."

 

한 명씩 삭제해야 할까요?

그럴 필요는 없습니다.

조건만 잘 작성하면

여러 행을 한 번에 삭제할 수 있습니다.


DELETE는 여러 행도 삭제할 수 있습니다.

WHERE 조건에

여러 행이 포함되면

그 모든 행이 삭제됩니다.


예제 1

독일 고객을 모두 삭제해 보겠습니다.

DELETE FROM Customers
WHERE Country = 'Germany';

실행 전

CustomerID CustomerName Country
1 Alfreds Futterkiste Germany
6 Blauer See Delikatessen Germany
17 Drachenblut Delikatessend Germany
21 Paris spécialités France

실행 후

CustomerID CustomerName Country
21 Paris spécialités France

Germany였던 고객들이

모두 삭제되었습니다.


SQL를 한 줄씩 살펴보기

DELETE FROM Customers

Customers 테이블에서

데이터를 삭제합니다.


WHERE Country = 'Germany';

Country가 Germany인

모든 행을 찾습니다.

찾은 모든 행이 삭제됩니다.


예제 2

가격이 10 이하인 상품을 삭제합니다.

DELETE FROM Products
WHERE Price <= 10;

조건에 맞는 모든 상품이

한 번에 삭제됩니다.


그림으로 이해하기

Customers
↓
WHERE 조건 검사
↓
조건에 맞는 행 선택
↓
행 삭제

UPDATE와 마찬가지로

DELETE도

조건을 만족하는 모든 행을 처리합니다.


실제 업무에서는?

다음과 같은 작업에 자주 사용됩니다.

  • 오래된 로그 삭제
  • 임시 데이터 정리
  • 시험용 데이터 제거
  • 중복 데이터 삭제
  • 탈퇴 회원 정보 정리

매일 자동으로 실행되는 DELETE도

많이 있습니다.


많이 하는 실수

실수 ①

조건이 너무 넓다.

DELETE FROM Products
WHERE Price > 0;

생각보다 훨씬 많은 상품이

삭제될 수 있습니다.


실수 ②

조건을 잘못 작성한다.

WHERE Country='German'

삭제되는 데이터가

하나도 없을 수도 있습니다.


실수 ③

삭제된 행의 개수를 확인하지 않는다.

MySQL은

삭제된 행(Row)의 개수를 알려줍니다.

예상보다 많거나 적다면

조건을 다시 확인해야 합니다.


실무 습관

DELETE를 실행하기 전에 COUNT(*)를 실행해 보세요.

 

예를 들어

SELECT COUNT(*)
FROM Customers
WHERE Country='Germany';

먼저

삭제될 데이터의 개수를 확인합니다.

그 다음

DELETE FROM Customers
WHERE Country='Germany';

를 실행하면

실수를 크게 줄일 수 있습니다.


DELETE는 실행 취소(Ctrl+Z)가 없습니다.

워드프로세서에서는

실수하면

Ctrl+Z를 누르면 됩니다.

하지만

데이터베이스에서는

DELETE를 실행한 후

복구가 매우 어려운 경우가 많습니다.

그래서

DELETE는 항상

신중하게 실행해야 합니다.


한눈에 정리

WHERE 결과 DELETE 동작
1개의 행 1개의 행 삭제
여러 행 여러 행 삭제
조건 없음 모든 행 삭제

이번 장 핵심 정리

✅ DELETE는 여러 행도 한 번에 삭제할 수 있다.

✅ WHERE 조건에 맞는 모든 행이 삭제된다.

✅ DELETE 전에 COUNT(*)로 삭제될 개수를 확인하면 안전하다.

✅ DELETE 후 영향을 받은 행(Row)의 개수도 확인하는 습관을 갖는다.


연습 문제

기본 문제

① Country가 Mexico인 고객을 모두 삭제하는 SQL을 작성하시오.

② Price가 20 이상인 상품을 모두 삭제하는 SQL을 작성하시오.


응용 문제

① Country가 Brazil 또는 Argentina인 고객을 삭제하는 SQL을 작성하시오.

② Price가 5 이하인 상품을 삭제하는 SQL을 작성하시오.


도전 문제

다음 SQL을 실행하면 어떤 일이 발생하는지 설명하시오.

DELETE FROM Customers
WHERE Country <> 'Korea';

정답

기본 문제

DELETE FROM Customers
WHERE Country = 'Mexico';
DELETE FROM Products
WHERE Price >= 20;

💡 실무 이야기

실무에서는 DELETE를 실행할 때 "몇 개가 삭제될 것인가?"를 먼저 예측하는 것이 매우 중요합니다.

예를 들어 관리자가 "오래된 로그 약 500건을 삭제한다."고 예상했는데, 실제로는 50만 건이 삭제된다면 큰 사고가 발생할 수 있습니다.

그래서 많은 개발자는 DELETE 전에 SELECT COUNT(*)를 실행하여 삭제 대상의 개수를 확인하고, DELETE를 실행한 후에도 영향받은 행(Row) 수가 예상과 일치하는지 다시 확인합니다.

이 두 단계만 습관이 되어도 대부분의 대형 사고를 예방할 수 있습니다.


✨ 다음 장 예고

다음 장은 DELETE 파트의 마지막 장입니다.

그동안 우리는

  • 한 행 삭제
  • 여러 행 삭제

를 배웠습니다.

마지막으로는

DELETE와 TRUNCATE의 차이, DELETE와 DROP의 차이, 그리고 데이터를 삭제할 때 꼭 알아야 할 개념을 정리하면서 DELETE 파트를 마무리하겠습니다.