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

MySQL 테이블에서 조건에 맞는 마지막 레코드를 삭제하는 방법

MySQL에서 특정 조건을 만족하는 마지막 레코드를 삭제하려면 ORDER BY DESCLIMIT를 함께 사용하면 됩니다. 이 방법은 해당 컬럼을 내림차순으로 정렬한 후 가장 앞에 위치한(즉, 가장 최근의) 레코드 하나만 선택하여 삭제하는 원리로 동작합니다.

기본 문법

조건부 마지막 레코드를 삭제하는 기본 문법은 다음과 같습니다.

DELETE FROM yourTableName WHERE yourColumnName1=yourValue ORDER BY yourColumnName2 DESC LIMIT 1;

위 쿼리는 지정한 조건(WHERE)에 해당하는 레코드 중에서 정렬 기준 컬럼을 내림차순(DESC)으로 정렬했을 때 첫 번째에 오는 레코드, 즉 '마지막' 레코드 하나만 삭제합니다.

실습 예제

1. 테이블 생성

문법을 실제로 이해하기 위해 먼저 예제용 테이블을 만들어 보겠습니다. 사용자 로그인 정보를 저장하는 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table UserLoginTable
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> UserId int,
    -> UserLoginDateTime datetime,
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.94 sec)

2. 데이터 삽입

INSERT 명령어를 사용해 몇 개의 레코드를 입력합니다.

mysql> insert into UserLoginTable(UserId,UserLoginDateTime) values(2,'2019-01-27 13:47:20');
Query OK, 1 row affected (0.19 sec)
mysql> insert into UserLoginTable(UserId,UserLoginDateTime) values(1,'2018-11-28 12:30:12');
Query OK, 1 row affected (0.16 sec)
mysql> insert into UserLoginTable(UserId,UserLoginDateTime) values(2,'2019-01-26 11:30:30');
Query OK, 1 row affected (0.20 sec)
mysql> insert into UserLoginTable(UserId,UserLoginDateTime) values(1,'2015-03-11 15:23:55');
Query OK, 1 row affected (0.21 sec)
mysql> insert into UserLoginTable(UserId,UserLoginDateTime) values(2,'2019-03-21 16:01:56');
Query OK, 1 row affected (0.23 sec)

3. 전체 레코드 조회

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

mysql> select *from UserLoginTable;

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

+----+--------+---------------------+
| Id | UserId | UserLoginDateTime   |
+----+--------+---------------------+
|  1 |      2 | 2019-01-27 13:47:20 |
|  2 |      1 | 2018-11-28 12:30:12 |
|  3 |      2 | 2019-01-26 11:30:30 |
|  4 |      1 | 2015-03-11 15:23:55 |
|  5 |      2 | 2019-03-21 16:01:56 |
+----+--------+---------------------+
5 rows in set (0.00 sec)

4. 조건부 마지막 레코드 삭제

이제 UserId가 2인 레코드 중에서 로그인 시간이 가장 최근인(마지막) 레코드를 삭제하는 쿼리입니다.

mysql> delete from UserLoginTable where UserId=2 ORDER BY UserLoginDateTime DESC LIMIT 1;
Query OK, 1 row affected (0.16 sec)

5. 삭제 결과 확인

다시 SELECT 문으로 테이블을 조회하여 결과를 확인합니다.

mysql> select *from UserLoginTable;

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

+----+--------+---------------------+
| Id | UserId | UserLoginDateTime   |
+----+--------+---------------------+
|  1 |      2 | 2019-01-27 13:47:20 |
|  2 |      1 | 2018-11-28 12:30:12 |
|  3 |      2 | 2019-01-26 11:30:30 |
|  4 |      1 | 2015-03-11 15:23:55 |
+----+--------+---------------------+
4 rows in set (0.00 sec)

실행 결과를 보면 UserId가 2인 레코드 중 가장 최근 로그인 시간(2019-03-21 16:01:56)을 가진 레코드가 성공적으로 삭제된 것을 확인할 수 있습니다.

정리

MySQL에서 조건에 맞는 마지막 레코드를 삭제할 때 핵심은 세 가지 절의 조합입니다. WHERE로 대상 레코드 범위를 좁히고, ORDER BY ... DESC로 최신(마지막) 레코드를 맨 앞으로 정렬한 뒤, LIMIT 1로 딱 하나만 삭제하도록 제한하는 것입니다. 이 패턴은 로그 데이터 정리나 중복 최신 기록 제거 등 다양한 상황에서 유용하게 활용할 수 있습니다.