MySQL 안전 모드란?
MySQL에는 실수로 인한 대량 데이터 변경·삭제를 방지해 주는 안전 업데이트 모드(SQL Safe Updates) 기능이 있습니다. 이 모드가 활성화되어 있으면 WHERE 절에 키(Key) 컬럼 조건이나 LIMIT이 없는 UPDATE, DELETE 문은 실행되지 않습니다.
따라서 안전 모드 상태에서 일괄 삭제 작업을 수행하려면 먼저 SQL_SAFE_UPDATES 변수를 0으로 설정해야 합니다. 사용하는 쿼리는 다음과 같습니다.
SET SQL_SAFE_UPDATES = 0;
예제 테이블 생성
위 쿼리의 동작을 이해하기 위해 간단한 테이블을 만들어 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table SafeDeleteDemo -> ( -> Price int -> ); Query OK, 0 rows affected (0.50 sec)
테스트 데이터 삽입
INSERT 명령어를 사용해 테이블에 여러 개의 레코드를 추가합니다.
mysql> insert into SafeDeleteDemo values(100); Query OK, 1 row affected (0.11 sec) mysql> insert into SafeDeleteDemo values(200); Query OK, 1 row affected (0.19 sec) mysql> insert into SafeDeleteDemo values(300); Query OK, 1 row affected (0.09 sec) mysql> insert into SafeDeleteDemo values(500); Query OK, 1 row affected (0.14 sec) mysql> insert into SafeDeleteDemo values(1000); Query OK, 1 row affected (0.10 sec) mysql> insert into SafeDeleteDemo values(150); Query OK, 1 row affected (0.11 sec)
삭제 전 데이터 확인
레코드를 삭제하기 전에 SELECT 문으로 테이블의 전체 데이터를 먼저 확인해 보겠습니다.
mysql> select *from SafeDeleteDemo;
실행 결과는 다음과 같습니다.
+-------+ | Price | +-------+ | 100 | | 200 | | 300 | | 500 | | 1000 | | 150 | +-------+ 6 rows in set (0.00 sec)
총 6개의 레코드가 저장되어 있는 것을 확인할 수 있습니다.
안전 모드 해제 후 삭제 실행
이제 SET 명령어로 안전 모드를 해제합니다.
mysql> SET SQL_SAFE_UPDATES = 0; Query OK, 0 rows affected (0.00 sec)
안전 모드가 해제된 상태에서 WHERE 절 조건에 맞는 레코드를 삭제해 보겠습니다. 여기서는 가격이 500 이상인 레코드를 삭제합니다.
mysql> delete from SafeDeleteDemo where Price >=500; Query OK, 2 rows affected (0.14 sec)
삭제 결과 확인
삭제 후 테이블에 남아 있는 레코드를 다시 조회해 보겠습니다.
mysql> select *from SafeDeleteDemo;
다음 출력 결과에서 가격이 500 이상인 레코드 2개가 성공적으로 삭제된 것을 확인할 수 있습니다.
+-------+ | Price | +-------+ | 100 | | 200 | | 300 | | 150 | +-------+ 4 rows in set (0.00 sec)
안전 모드 다시 활성화
작업이 끝난 후에는 동일한 SET 명령어로 안전 모드를 다시 켜는 것이 좋습니다. 이렇게 하면 이후 실수로 인한 대량 삭제를 다시 방지할 수 있습니다.
mysql> SET SQL_SAFE_UPDATES = 1; Query OK, 0 rows affected (0.00 sec)
주의: 안전 모드를 해제한 상태에서는 WHERE 절 없이 DELETE 문을 실행하면 테이블의 모든 데이터가 삭제될 수 있습니다. 항상 정확한 조건문을 사용하고, 작업이 끝나면 반드시 안전 모드를 복구하는 습관을 들이는 것이 좋습니다.