- 0
- 109 단어
DELETE는 SQL에서 테이블에 저장된 기존 데이터를 삭제할 때 사용하는 구문입니다. INSERT가 새로운 데이터를 추가하고 UPDATE가 기존 데이터를 수정한다면 DELETE는 더 이상 필요하지 않은 데이터를 테이블에서 제거하는 역할을 합니다. 회원 탈퇴, 주문 데이터 삭제, 테스트 데이터 정리 등 다양한 상황에서 사용됩니다.
DELETE의 기본 문법
DELETE는 DELETE FROM 뒤에 데이터를 삭제할 테이블을 지정하고 WHERE를 사용하여 삭제할 대상을 정하는 방식으로 작성합니다.
기본적인 형태는 다음과 같습니다.
DELETE FROM member
WHERE id = 101;
위 쿼리는 member 테이블에서 id가 101인 행을 삭제합니다.
UPDATE와 마찬가지로 DELETE에서 WHERE는 매우 중요한 역할을 합니다. WHERE 조건을 통해 어떤 데이터를 삭제할 것인지 지정하기 때문입니다.
예를 들어 특정 지역의 회원을 삭제하려면 다음과 같이 작성할 수 있습니다.
DELETE FROM member
WHERE city = '부산';
이 경우 city가 부산인 모든 회원 데이터가 삭제됩니다.
따라서 DELETE를 사용할 때는 WHERE 조건에 해당하는 데이터가 정확한지 확인해야 합니다. 특히 여러 행이 조건에 해당하는 경우 예상보다 많은 데이터가 삭제될 수 있습니다.
WHERE가 없는 DELETE의 주의점
DELETE에서 가장 주의해야 하는 상황은 WHERE를 작성하지 않는 경우입니다.
DELETE FROM member;
위 쿼리는 member 테이블에 존재하는 모든 행을 삭제합니다.
테이블 자체가 삭제되는 것은 아니지만 저장되어 있던 데이터가 모두 제거됩니다. 따라서 단순히 특정 데이터를 삭제하려는 상황에서 WHERE를 빠뜨리면 심각한 데이터 손실이 발생할 수 있습니다.
특정 회원 한 명만 삭제하려는 경우에는 다음과 같이 조건을 명확하게 지정해야 합니다.
DELETE FROM member
WHERE id = 101;
실무에서는 DELETE를 실행하기 전에 같은 WHERE 조건으로 SELECT를 실행하여 삭제 대상이 정확한지 확인하는 방법을 사용할 수 있습니다.
SELECT *
FROM member
WHERE id = 101;
조회 결과를 통해 실제 삭제할 데이터가 맞는지 확인한 뒤 DELETE를 실행하면 잘못된 데이터를 삭제할 가능성을 줄일 수 있습니다.
DELETE와 데이터 제약 조건
DELETE를 사용할 때는 다른 테이블과의 관계도 고려해야 합니다. 특히 외래 키를 통해 다른 테이블에서 해당 데이터를 참조하고 있다면 삭제가 제한될 수 있습니다.
예를 들어 회원 테이블과 주문 테이블이 연결되어 있다고 가정하겠습니다.
member
id = 101
orders
member_id = 101
orders 테이블의 member_id가 member 테이블의 id를 참조하고 있다면 회원 ID 101을 삭제하는 순간 주문 데이터가 어떤 회원을 가리키는지 알 수 없게 될 수 있습니다.
이러한 데이터 무결성 문제를 방지하기 위해 데이터베이스는 외래 키 제약 조건을 이용하여 특정 데이터의 삭제를 제한할 수 있습니다.
반대로 외래 키에 ON DELETE CASCADE와 같은 설정이 적용되어 있다면 부모 데이터가 삭제될 때 연결된 자식 데이터도 함께 삭제될 수 있습니다. 따라서 관계형 데이터베이스에서 DELETE를 사용할 때는 해당 테이블이 다른 테이블과 어떤 관계를 가지고 있는지 확인하는 것이 중요합니다.
DELETE는 조건에 따라 여러 행을 한 번에 삭제할 수도 있습니다.
DELETE FROM orders
WHERE order_date < '2025-01-01';
위 쿼리는 2025년 1월 1일보다 오래된 주문 데이터를 모두 삭제합니다.
이처럼 대량 삭제를 수행할 때는 특히 주의해야 합니다. 날짜 조건이나 상태 조건이 예상과 다르게 작성되면 많은 데이터가 한 번에 삭제될 수 있기 때문입니다.
또한 DELETE는 테이블의 구조 자체를 제거하는 명령이 아닙니다. 테이블은 그대로 유지하면서 조건에 해당하는 행만 삭제합니다. 테이블 자체를 삭제하는 DROP TABLE과는 목적이 다릅니다.
DELETE FROM member
WHERE id = 101;
위 명령은 특정 데이터를 삭제하지만,
DROP TABLE member;
은 member 테이블 자체를 제거합니다.
따라서 DELETE와 DROP은 반드시 구분해야 합니다. DELETE는 데이터 행을 대상으로 하고 DROP은 데이터베이스 객체 자체를 대상으로 합니다.
DELETE 역시 UPDATE와 마찬가지로 트랜잭션과 함께 사용할 수 있습니다. 데이터베이스가 트랜잭션을 지원하고 현재 작업이 트랜잭션 범위 안에서 수행된다면 삭제 결과를 확인한 뒤 COMMIT하거나 문제가 있을 경우 ROLLBACK을 수행할 수 있습니다. 이러한 기능은 실수로 데이터를 삭제했을 때 변경 내용을 되돌리는 데 중요한 역할을 합니다.
결국 DELETE는 테이블에 저장된 기존 데이터를 삭제하기 위한 SQL 구문입니다. DELETE FROM으로 대상 테이블을 지정하고 WHERE를 이용하여 삭제할 데이터를 선택합니다. WHERE를 생략하면 테이블의 모든 행이 삭제될 수 있으므로 실행 전에 조건을 반드시 확인해야 합니다.
또한 외래 키와 같은 테이블 간의 관계에 따라 삭제가 제한되거나 관련 데이터가 함께 삭제될 수 있으므로 데이터 구조를 확인한 뒤 사용하는 것이 중요합니다. 다음 단계에서는 여러 테이블의 데이터를 연결하여 조회하는 JOIN에 대해 알아보겠습니다.