테이블에서 가장 큰 ID 값을 가진 레코드 하나만 삭제해야 하는 경우, ORDER BY DESC와 LIMIT 1을 함께 사용하면 간단하게 처리할 수 있습니다. 이 두 절을 조합하면 ID 기준으로 내림차순 정렬한 뒤 맨 위의 레코드 한 건만 삭제 대상으로 지정할 수 있습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
UserId int,
UserName varchar(20)
);
Query OK, 0 rows affected (0.57 sec)2. 샘플 데이터 삽입하기
INSERT 문을 사용해 여러 개의 레코드를 입력합니다.
mysql> insert into DemoTable values(100,'John'); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(234,'Mike'); Query OK, 1 row affected (0.28 sec) mysql> insert into DemoTable values(145,'Sam'); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(278,'Carol'); Query OK, 1 row affected (0.24 sec) mysql> insert into DemoTable values(289,'David'); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(277,'Bob'); Query OK, 1 row affected (0.14 sec)
3. 데이터 확인하기
SELECT 문으로 현재 저장된 전체 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+--------+----------+ | UserId | UserName | +--------+----------+ | 100 | John | | 234 | Mike | | 145 | Sam | | 278 | Carol | | 289 | David | | 277 | Bob | +--------+----------+ 6 rows in set (0.00 sec)
4. 가장 큰 ID의 레코드 삭제하기
아래 쿼리는 UserId를 기준으로 내림차순 정렬한 후, 첫 번째 레코드 즉 가장 큰 ID를 가진 행을 삭제합니다.
mysql> delete from DemoTable order by UserId DESC limit 1; Query OK, 1 row affected (0.15 sec)
5. 삭제 결과 검증하기
다시 전체 레코드를 조회하여 가장 큰 ID가 정상적으로 삭제되었는지 확인합니다. 아래 결과에서 UserId 289(David)가 성공적으로 제거된 것을 볼 수 있습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+--------+----------+ | UserId | UserName | +--------+----------+ | 100 | John | | 234 | Mike | | 145 | Sam | | 278 | Carol | | 277 | Bob | +--------+----------+ 5 rows in set (0.00 sec)
정리
DELETE 문에 ORDER BY와 LIMIT을 함께 사용하면 특정 조건 없이도 최대값 또는 최소값을 가진 레코드를 손쉽게 삭제할 수 있습니다. 이 방법은 서브쿼리를 사용하지 않아도 되기 때문에 쿼리가 간결하고 실행 성능 면에서도 유리한 경우가 많습니다. 반대로 가장 작은 ID를 삭제하고 싶다면 ORDER BY UserId ASC limit 1처럼 정렬 방향만 바꾸면 됩니다.