Drop
Drop은 데이터베이스 객체(테이블, 뷰, 인덱스, 사용자, 데이터베이스 등)를 완전히 삭제하는 SQL 명령어이다. 이 명령어를 실행하면 객체 자체와 그 안의 모든 데이터, 구조, 권한 등이 영구적으로 제거되며, 일반적으로 롤백이 불가능하다.
목차
[숨기기]개요[편집]
DROP은 SQL에서 데이터베이스 객체를 영구적으로 삭제할 때 사용하는 명령어로, DDL(Data Definition Language, 데이터 정의어)에 속한다. 이 명령어를 실행하면 해당 객체 자체는 물론, 그와 관련된 모든 메타데이터와 내용도 완전히 제거된다.
DROP은 실행 즉시 적용되며, 일반적으로 롤백이 불가능하고 복구가 어렵다.
목적 및 기능[편집]
- 데이터베이스, 테이블, 뷰, 인덱스, 사용자 등 다양한 객체를 삭제할 수 있다.
- 삭제된 객체는 영구적으로 사라지며 다시 사용하려면 처음부터 CREATE로 재정의해야 한다.
- 많은 DBMS에서 DROP은 트랜잭션을 지원하지 않기 때문에, 실행 후 되돌릴 수 없다.
- 삭제된 객체에 연결된 다른 객체들(뷰, 외래 키, 트리거 등) 도 함께 무효화되거나 오류를 발생시킬 수 있다.
문법[편집]
기본 문법
DROP [OBJECT_TYPE] [IF EXISTS] object_name;
- OBJECT_TYPE: 삭제할 객체의 종류 (TABLE, DATABASE, VIEW, INDEX 등)
- IF EXISTS: 객체가 존재할 때만 삭제하도록 함 (존재하지 않으면 에러 방지)
- object_name: 삭제할 객체의 이름
사용 예제[편집]
- 테이블 삭제
sql
DROP TABLE employees;
→ employees라는 테이블과 그 안의 모든 데이터 및 제약조건, 인덱스가 제거됨.
- 존재할 때만 테이블 삭제
DROP TABLE IF EXISTS employees;
→ 테이블이 없을 경우에도 에러 없이 넘어감.
- 데이터베이스 삭제
DROP DATABASE sales_data;
→ sales_data라는 데이터베이스 자체가 삭제되며, 그 안의 모든 테이블과 뷰도 함께 제거됨.
- 뷰 삭제
DROP VIEW top_customers;
- 인덱스 삭제 (DBMS에 따라 다름)
-- PostgreSQL DROP INDEX idx_customer_name; -- MySQL DROP INDEX idx_customer_name ON customers;
- 사용자 삭제
DROP USER johndoe;
주요 사용 대상[편집]
- TABLE : 테이블 구조 및 내부 데이터 삭제
- VIEW : 가상 테이블 삭제
- INDEX : 인덱스 제거
- DATABASE : 전체 데이터베이스와 모든 객체 제거
- SCHEMA : 스키마 내 모든 객체 제거
- TRIGGER : 자동 동작 설정 제거
- USER/ROLE : 사용자 계정 또는 권한 그룹 제거
DROP의 특징과 주의점[편집]
- 위험성
- 비가역적: 대부분의 DBMS에서 DROP은 트랜잭션 안에서도 롤백되지 않음.
- 연관 객체 파괴: 외래 키, 종속 뷰, 트리거, 저장 프로시저 등 의존성 있는 객체들이 함께 비활성화되거나 오류 발생.
- 데이터와 구조 동시 삭제: 단순히 데이터를 지우는 것이 아니라, 테이블 정의 자체가 제거됨.
- 복구 불가: 명시적으로 백업하지 않는 이상, 삭제된 데이터는 되살릴 수 없음.
- 안전하게 사용하려면
- 항상 IF EXISTS 옵션을 함께 쓰는 습관 들이기.
- 사전에 DESCRIBE, SHOW CREATE TABLE, 또는 INFORMATION_SCHEMA를 통해 의존성 파악.
- 실무에서는 삭제 전 백업, 또는 보호 정책을 운영해야 함.
- GUI 환경에서는 실수로 삭제되는 걸 방지하기 위해 권한 제한 또는 이중 확인 프로세스 구성.
DROP vs TRUNCATE vs DELETE 비교[편집]
항목 DROP TRUNCATE DELETE 삭제 대상 객체 전체 (구조 + 데이터) 테이블의 모든 행 (구조 유지) 선택한 행 (조건 기반 삭제) 복구 가능성 불가 불가 (일반적으로) 가능 (트랜잭션 내라면 가능) 속도 매우 빠름 빠름 느릴 수 있음 제약조건 제거됨 유지됨 (일부 DBMS는 제약 있음) 유지됨 사용 목적 객체 자체 제거 대량 데이터 초기화 일부 데이터 제거
실전 팁[편집]
- 개발 환경에서는 자동화된 마이그레이션 스크립트에 DROP IF EXISTS를 많이 포함함.
- 운영 환경에서는 보통 DROP이 금지되거나, 승인 절차가 필요하도록 설정함.
- PostgreSQL이나 Oracle 등에서는 CASCADE 옵션으로 연관 객체까지 자동 삭제할 수 있으니 주의해야 함:
DROP TABLE employees CASCADE;
같이 보기[편집]