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)와 함께 사용하면 주기적인 데이터 정리 작업도 자동화할 수 있습니다.