MySQL에서 가장 낮은 ID를 가진 레코드를 삭제하려면 DELETE 문에 ORDER BY 절과 LIMIT 절을 함께 사용하면 됩니다. 일반적으로 DELETE 문에서는 ORDER BY와 LIMIT를 자주 사용하지 않지만, 이 조합을 활용하면 특정 조건 없이도 정렬 기준에 따라 원하는 개수의 레코드만 손쉽게 삭제할 수 있습니다.
기본 문법
delete from yourTableName order by yourColumnName limit 1;
위 문법에서 yourColumnName으로 지정한 컬럼을 오름차순(ASC)으로 정렬한 뒤, 가장 앞에 위치한 레코드 한 건만 삭제합니다. 즉, ID 컬럼을 기준으로 정렬하면 가장 작은 ID를 가진 레코드가 제거됩니다.
예제 테이블 생성
먼저 실습용 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Id int,
Name varchar(20)
);
Query OK, 0 rows affected (0.75 sec)레코드 삽입
이제 INSERT 명령을 사용해 테이블에 여러 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values(10,'Larry'); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable values(100,'Mike'); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable values(30,'Sam'); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(90,'Chris'); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(9,'Carol'); Query OK, 1 row affected (0.19 sec)
현재 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------+-------+ | Id | Name | +------+-------+ | 10 | Larry | | 100 | Mike | | 30 | Sam | | 90 | Chris | | 9 | Carol | +------+-------+ 5 rows in set (0.00 sec)
가장 낮은 ID의 레코드 삭제
아래 쿼리는 Id 컬럼을 기준으로 정렬한 후, 첫 번째 레코드 즉 가장 낮은 ID(여기서는 9)를 가진 레코드를 삭제합니다.
mysql> delete from DemoTable order by Id limit 1; Query OK, 1 row affected (0.18 sec)
삭제 결과 확인
다시 전체 레코드를 조회하여 가장 낮은 ID의 레코드가 정상적으로 삭제되었는지 확인해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------+-------+ | Id | Name | +------+-------+ | 10 | Larry | | 100 | Mike | | 30 | Sam | | 90 | Chris | +------+-------+ 4 rows in set (0.00 sec)
출력 결과에서 ID가 9인 'Carol' 레코드가 사라진 것을 확인할 수 있습니다. 이처럼 ORDER BY ... LIMIT 1 조합을 사용하면 서브쿼리나 별도의 MIN() 함수 조회 없이도 간단하게 최솟값 레코드를 삭제할 수 있습니다.