MySQL에서 테이블의 전체 데이터가 아닌 특정 조건에 맞는 일부 행만 삭제하려면 DELETE 문과 함께 WHERE 절을 사용하면 됩니다. WHERE 절이 없는 DELETE 문은 테이블의 모든 행을 삭제하므로, 조건을 반드시 명시해야 원하는 데이터만 안전하게 제거할 수 있습니다.
1. 예제 테이블 생성하기
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Id int,
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.60 sec)
2. 샘플 데이터 삽입하기
INSERT 문을 사용해 테이블에 여러 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(100,'Bob');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(101,'Chris');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values(102,'David');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(103,'Sam');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values(104,'Carol');
Query OK, 1 row affected (0.10 sec)
3. 현재 저장된 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------+-------+
| Id | Name |
+------+-------+
| 100 | Bob |
| 101 | Chris |
| 102 | David |
| 103 | Sam |
| 104 | Carol |
+------+-------+
5 rows in set (0.00 sec)
현재 총 5개의 행이 저장되어 있습니다.
4. 조건에 맞는 행만 삭제하기
이제 WHERE 절을 사용해 Id가 102보다 큰 행만 삭제하는 쿼리를 실행합니다.
mysql> delete from DemoTable
-> where Id > 102;
Query OK, 2 rows affected (0.10 sec)
쿼리 결과 메시지에서 알 수 있듯이, 조건에 해당하는 2개의 행(Id 103, 104)이 삭제되었습니다.
5. 삭제 후 결과 확인하기
다시 SELECT 문으로 테이블을 조회하여 삭제가 정상적으로 적용되었는지 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------+-------+
| Id | Name |
+------+-------+
| 100 | Bob |
| 101 | Chris |
| 102 | David |
+------+-------+
3 rows in set (0.00 sec)
정리
MySQL에서 일부 행만 삭제할 때는 DELETE FROM 테이블명 WHERE 조건; 형식을 사용합니다. 이 예제에서는 WHERE Id > 102라는 조건을 통해 Id가 103과 104인 두 개의 행만 선택적으로 삭제했습니다. DELETE 문 실행 시에는 항상 WHERE 절을 신중하게 작성해야 의도하지 않은 데이터 손실을 방지할 수 있습니다.