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

중복 레코드가 있는 MySQL 테이블에서 값 하나만 삭제하는 방법

MySQL에서 DELETE 문을 사용하면 테이블의 레코드를 손쉽게 삭제할 수 있습니다. 하지만 동일한 값이 여러 번 중복되어 저장된 경우, DELETE 문을 그대로 실행하면 해당 값을 가진 모든 행이 한꺼번에 삭제됩니다. 이럴 때 LIMIT 절을 함께 사용하면 삭제되는 레코드의 개수를 원하는 만큼 제한할 수 있습니다.

기본 문법

DELETE FROM yourTableName WHERE yourColumnName = yourValue LIMIT 1;

위 문법에서 LIMIT 1은 조건에 일치하는 레코드 중 딱 하나만 삭제하겠다는 의미입니다. 숫자를 변경하면 삭제 건수를 조절할 수 있습니다.

예제 테이블 생성하기

먼저 실습용 테이블을 만들어 보겠습니다.

mysql> create table DemoTable
    -> (
    -> Amount int
    -> );
Query OK, 0 rows affected (1.38 sec)

샘플 데이터 삽입

INSERT 명령으로 여러 개의 레코드를 삽입합니다. 이때 값 50을 세 번 넣어 중복 상황을 만들어 두겠습니다.

mysql> insert into DemoTable values(50);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(100);
Query OK, 1 row affected (0.36 sec)
mysql> insert into DemoTable values(50);
Query OK, 1 row affected (0.59 sec)
mysql> insert into DemoTable values(70);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(90);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(50);
Query OK, 1 row affected (0.23 sec)

전체 레코드 확인

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+--------+
| Amount |
+--------+
|     50 |
|    100 |
|     50 |
|     70 |
|     90 |
|     50 |
+--------+
6 rows in set (0.00 sec)

현재 테이블에는 값 50이 세 개 존재합니다.

중복 값 중 하나만 삭제하기

이제 LIMIT 절을 활용해 값 50을 가진 레코드 중 하나만 삭제하는 쿼리를 실행해 보겠습니다.

mysql> delete from DemoTable where Amount=50 limit 1;
Query OK, 1 row affected (0.39 sec)

쿼리 실행 후 테이블을 다시 조회해 보면,

mysql> select *from DemoTable;

결과는 다음과 같습니다.

+--------+
| Amount |
+--------+
|    100 |
|     50 |
|     70 |
|     90 |
|     50 |
+--------+
5 rows in set (0.00 sec)

출력 결과를 보면 값 50이 세 개에서 두 개로 줄어든 것을 확인할 수 있습니다. 즉, 조건에 일치하는 레코드가 여러 개 있어도 LIMIT 1 덕분에 단 하나의 행만 삭제된 것입니다.

참고 사항

  • LIMIT 생략 시 주의: LIMIT 없이 DELETE를 실행하면 조건에 맞는 모든 중복 레코드가 삭제되므로, 일부만 지우고 싶다면 반드시 LIMIT을 명시해야 합니다.
  • ORDER BY와 조합: 어떤 행이 먼저 삭제될지 순서를 정하고 싶다면 ORDER BY 절을 함께 사용할 수 있습니다. 예를 들어 DELETE FROM DemoTable WHERE Amount=50 ORDER BY Amount LIMIT 1;처럼 작성하면 삭제 우선순위를 제어할 수 있습니다.
  • 안전 모드 설정: MySQL Workbench 등에서 안전 업데이트 모드(Safe Update Mode)가 활성화되어 있으면 키 컬럼 없이 DELETE를 실행할 때 오류가 발생할 수 있으니 환경 설정을 확인하세요.

이처럼 DELETE 문에 LIMIT 절을 추가하는 것만으로도 중복 레코드가 많은 테이블에서 원하는 개수만큼만 선택적으로 데이터를 삭제할 수 있습니다.