MySQL 테이블에서 특정 행 하나만 남기고 나머지 모든 행을 한 번에 삭제해야 하는 경우가 종종 있습니다. 이럴 때는 DELETE 문과 !=(같지 않음) 연산자를 조합하여 간단하게 처리할 수 있습니다.
기본 문법
특정 값과 일치하지 않는 모든 행을 삭제하는 기본 문법은 다음과 같습니다.
DELETE FROM yourTableName WHERE yourColumnName != yourValue;
예제 테이블 생성
실습을 위해 먼저 예제 테이블을 생성해 보겠습니다.
mysql> CREATE TABLE DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Subject varchar(100)
);
Query OK, 0 rows affected (0.65 sec)데이터 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> INSERT INTO DemoTable(Subject) VALUES('MySQL');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable(Subject) VALUES('MongoDB');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable(Subject) VALUES('Java');
Query OK, 1 row affected (0.12 sec)전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM DemoTable;
출력 결과
+----+---------+ | Id | Subject | +----+---------+ | 1 | MySQL | | 2 | MongoDB | | 3 | Java | +----+---------+ 3 rows in set (0.00 sec)
'MongoDB' 행만 남기고 삭제하기
이제 Subject 컬럼이 'MongoDB'가 아닌 모든 행을 삭제하는 쿼리를 실행합니다.
mysql> DELETE FROM DemoTable WHERE Subject != 'MongoDB'; Query OK, 2 rows affected (0.19 sec)
삭제 후 데이터 확인
다시 전체 레코드를 조회하여 결과를 확인해 보겠습니다.
mysql> SELECT * FROM DemoTable;
출력 결과
+----+---------+ | Id | Subject | +----+---------+ | 2 | MongoDB | +----+---------+ 1 row in set (0.00 sec)
결과를 보면 'MongoDB'라는 값을 가진 행 하나만 남고, 나머지 두 개의 행이 성공적으로 삭제된 것을 확인할 수 있습니다.
참고 사항
!= 대신 <> 연산자를 사용해도 동일하게 동작하며, 여러 값을 제외하고 싶다면 NOT IN ('값1', '값2') 조건을 활용할 수 있습니다. 또한 DELETE 작업은 되돌릴 수 없으므로, 중요한 데이터가 있는 테이블이라면 실행 전 반드시 백업을 하거나 트랜잭션(START TRANSACTION / ROLLBACK)으로 안전하게 처리하는 것이 좋습니다.