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

MySQL에서 가장 큰 ID를 가진 레코드를 삭제하는 쿼리 작성 방법

테이블에서 가장 큰 ID 값을 가진 레코드 하나만 삭제해야 하는 경우, ORDER BY DESCLIMIT 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처럼 정렬 방향만 바꾸면 됩니다.