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

MySQL에서 5분 이상 지난 타임스탬프의 레코드를 삭제하는 방법

MySQL에서 특정 시간 기준으로 오래된 데이터를 자동으로 정리해야 하는 경우가 자주 발생합니다. 예를 들어 로그 데이터나 임시 세션 정보처럼 일정 시간이 지난 레코드를 주기적으로 삭제할 때 유용합니다. 이때 DELETE 명령어와 INTERVAL 구문을 함께 사용하면 손쉽게 처리할 수 있습니다.

1. 테이블 생성하기

먼저 실습에 사용할 테이블을 생성하겠습니다. datetime 타입의 컬럼 하나로 구성된 간단한 테이블입니다.

mysql> create table DemoTable1851
     (
     DueDate datetime
     );
Query OK, 0 rows affected (0.00 sec)

2. 샘플 데이터 삽입하기

INSERT 명령어를 사용하여 테스트용 레코드를 몇 개 삽입합니다.

mysql> insert into DemoTable1851 values('2019-12-03 21:30:35');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1851 values('2019-12-03 21:45:00');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1851 values('2019-12-03 21:34:00');
Query OK, 1 row affected (0.00 sec)

3. 전체 레코드 조회하기

SELECT 문으로 테이블에 저장된 모든 레코드를 확인해 보겠습니다.

mysql> select * from DemoTable1851;

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

+---------------------+
| DueDate             |
+---------------------+
| 2019-12-03 21:30:35 |
| 2019-12-03 21:45:00 |
| 2019-12-03 21:34:00 |
+---------------------+
3 rows in set (0.00 sec)

4. 현재 시간 확인하기

NOW() 함수를 사용하면 MySQL 서버의 현재 날짜와 시간을 알 수 있습니다.

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2019-12-03 21:38:46 |
+---------------------+
1 row in set (0.00 sec)

현재 시간이 21:38:46이므로, 5분 전인 21:33:46보다 이전의 레코드들이 삭제 대상이 됩니다.

5. 5분 이전 레코드 삭제하기

타임스탬프가 5분보다 오래된 레코드를 삭제하는 쿼리는 다음과 같습니다.

mysql> delete from DemoTable1851 where DueDate < (NOW() - INTERVAL 5 MINUTE);
Query OK, 2 rows affected (0.00 sec)

NOW() - INTERVAL 5 MINUTE 구문은 현재 시간에서 정확히 5분을 뺀 시점을 계산하며, DueDate 값이 그보다 작은(즉, 더 오래된) 레코드만 삭제됩니다. 위 예제에서는 21:30:35와 21:34:00 두 개의 레코드가 삭제되었습니다.

6. 삭제 후 결과 확인하기

삭제 후 다시 SELECT 문으로 남아 있는 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1851;

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

+---------------------+
| DueDate             |
+---------------------+
| 2019-12-03 21:45:00 |
+---------------------+
1 row in set (0.00 sec)

추가 팁

시간 단위는 필요에 따라 유연하게 변경할 수 있습니다. 예를 들어 1시간 이전 데이터를 삭제하려면 NOW() - INTERVAL 1 HOUR, 하루 이전 데이터라면 NOW() - INTERVAL 1 DAY를 사용하면 됩니다. 또한 MySQL 5.6.4 이상에서는 datetime 컬럼에 ON UPDATE CURRENT_TIMESTAMP 옵션을 활용하거나, 이벤트 스케줄러(EVENT SCHEDULER)와 함께 사용하면 주기적인 데이터 정리 작업도 자동화할 수 있습니다.