DB

[MySQL] DELETE 기본 문법 총정리 – 안전하게 데이터 삭제하는 법

인생아 2025. 7. 2. 12:40
반응형

MySQL에서 DELETE 문은 데이터베이스 테이블의 특정 행(row)을 영구적으로 삭제하는 SQL 명령어이다.
사용하기는 쉽지만, 실수하면 복구가 어려우므로 반드시 정확한 문법과 조건을 이해하고 활용해야 한다.

✅ DELETE 기본 문법 구조

DELETE FROM 테이블명
WHERE 조건;

DELETE 문에서 WHERE 조건을 명시하지 않으면, 해당 테이블의 모든 행이 삭제되므로 주의해야 한다.

예제: 특정 사용자 삭제

DELETE FROM users
WHERE id = 101;

id가 101인 사용자를 삭제한다. 삭제된 후에는 해당 행을 복구할 수 없다.

예제: 전체 삭제 (위험)

DELETE FROM users;

주의: WHERE 절이 없으면 모든 데이터가 삭제되므로 반드시 조건을 명시해야 한다.

반응형

✅ DELETE vs TRUNCATE vs DROP 비교

명령어 의미 롤백 가능 테이블 구조 유지 자동 증가 초기화
DELETE 행 삭제 O O X
TRUNCATE 전체 삭제 X O O
DROP 테이블 삭제 X X -

DELETE는 가장 유연하고 안전한 삭제 명령어이지만, 많은 데이터를 삭제하면 성능에 영향을 줄 수 있다.

✅ DELETE WHERE 다중 조건

DELETE FROM orders
WHERE user_id = 5 AND status = '취소됨';

AND, OR, IN, BETWEEN 등을 활용하여 복잡한 조건 조합도 가능하다.

✅ DELETE + IN 조건 활용

DELETE FROM products
WHERE category_id IN (1, 2, 3);

여러 조건을 한 번에 지정할 때 유용하다.

✅ DELETE + 서브쿼리 활용

DELETE FROM cart
WHERE user_id IN (
  SELECT id FROM users WHERE inactive = 1
);

서브쿼리를 통해 동적으로 삭제 대상을 지정할 수 있다.

✅ DELETE + LIMIT 적용

MySQL은 특정 개수만 삭제하고 싶을 때 LIMIT을 지원한다.

DELETE FROM logs
ORDER BY created_at ASC
LIMIT 100;

가장 오래된 로그 100개만 삭제하는 방식이다. 대량 삭제 시 자주 활용된다.

반응형

✅ DELETE + JOIN을 통한 다중 테이블 조건 삭제

MySQL은 JOIN을 활용한 삭제도 가능하다. 다만 문법이 조금 다르다.

DELETE u FROM users u
JOIN user_logs l ON u.id = l.user_id
WHERE l.status = '스팸';

JOIN을 활용해 연관 테이블 조건에 따라 삭제하는 방식이다.

✅ DELETE 실행 전 확인 팁

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

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

조건이 맞는지 확인한 후 아래처럼 삭제한다.

DELETE FROM users WHERE status = '탈퇴';

✅ DELETE 실행 결과 확인

삭제한 행 수를 바로 확인할 수 있다.

SELECT ROW_COUNT();

또는 프로그래밍 언어에서는 affected_rows()를 통해 확인한다.

✅ 트랜잭션과 함께 안전하게 삭제

START TRANSACTION;

DELETE FROM payments WHERE status = '미완료';
DELETE FROM orders WHERE payment_status = '미완료';

COMMIT;

여러 삭제가 동시에 이뤄질 때는 트랜잭션(Transaction)으로 묶어야 데이터 정합성을 보장할 수 있다.

✅ 실무에서 자주 발생하는 DELETE 관련 문제

  • WHERE 조건 누락으로 전부 삭제됨
  • 외래키 제약(FK) 때문에 삭제 실패
  • 트리거로 인해 삭제되지 않음
  • 트랜잭션 커밋 누락으로 삭제 반영 안됨

이런 문제들은 모두 DELETE 문 사용 시 발생할 수 있으므로, 사전에 확인하는 습관이 필요하다.

✅ 공식 문서 참고 링크

 

반응형