Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 안전 모드에서 데이터 삭제하는 방법 – SQL_SAFE_UPDATES 설정 가이드

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 문을 실행하면 테이블의 모든 데이터가 삭제될 수 있습니다. 항상 정확한 조건문을 사용하고, 작업이 끝나면 반드시 안전 모드를 복구하는 습관을 들이는 것이 좋습니다.