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

MySQL에서 특정 행 하나만 남기고 나머지 모든 행 삭제하는 방법

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)으로 안전하게 처리하는 것이 좋습니다.