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

MySQL에서 특정 날짜 기준 30일 이전 데이터를 삭제하는 쿼리 방법

MySQL에서 특정 날짜 기준 30일 이전 데이터 삭제하기

데이터베이스를 운영하다 보면 만료된 데이터나 오래된 로그를 주기적으로 정리해야 하는 경우가 많습니다. MySQL에서는 INTERVAL 연산자를 활용하면 특정 날짜를 기준으로 30일 이전의 레코드를 손쉽게 삭제할 수 있습니다.

기본 문법

DELETE FROM yourTableName
WHERE yourColumnName < (yourAnotherDateValue - INTERVAL 30 DAY);

- INTERVAL 30 DAY 구문은 지정한 날짜에서 30일을 뺀 값을 계산합니다. 따라서 WHERE 조건의 컬럼 값이 그 날짜보다 이전인 레코드만 삭제됩니다.

예제 테이블 생성

먼저 실습에 사용할 테이블을 생성하겠습니다.

mysql> CREATE TABLE DemoTable
(
    DueDate date
);
Query OK, 0 rows affected (0.68 sec)

샘플 데이터 삽입

INSERT 명령을 사용하여 몇 개의 날짜 데이터를 입력합니다.

mysql> INSERT INTO DemoTable VALUES('2019-08-25');
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO DemoTable VALUES('2019-07-01');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable VALUES('2019-06-20');
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable VALUES('2019-09-02');
Query OK, 1 row affected (0.14 sec)

데이터 조회

SELECT 문으로 현재 저장된 전체 레코드를 확인해 보겠습니다.

mysql> SELECT * FROM DemoTable;

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

+------------+
| DueDate    |
+------------+
| 2019-08-25 |
| 2019-07-01 |
| 2019-06-20 |
| 2019-09-02 |
+------------+
4 rows in set (0.00 sec)

30일 이전 데이터 삭제 쿼리 실행

이제 '2019-08-31'을 기준으로 30일 이전의 날짜를 삭제하는 쿼리를 실행합니다.

mysql> DELETE FROM DemoTable
WHERE DueDate < ('2019-08-31' - INTERVAL 30 DAY);
Query OK, 2 rows affected (0.22 sec)

'2019-08-31'에서 30일을 빼면 '2019-08-01'이 되므로, 그보다 이전 날짜인 '2019-07-01'과 '2019-06-20' 두 건이 삭제됩니다.

삭제 결과 확인

테이블을 다시 조회하여 삭제가 정상적으로 적용되었는지 확인합니다.

mysql> SELECT * FROM DemoTable;
+------------+
| DueDate    |
+------------+
| 2019-08-25 |
| 2019-09-02 |
+------------+
2 rows in set (0.00 sec)

마무리 및 참고 사항

이처럼 INTERVAL 연산자를 사용하면 별도의 날짜 계산 함수 없이 간단하게 조건을 처리할 수 있습니다. 실무에서는 기준 날짜 대신 NOW()CURDATE() 함수를 사용해 현재 시점 기준으로 오래된 데이터를 삭제하는 패턴도 널리 활용됩니다.

DELETE FROM DemoTable
WHERE DueDate < (CURDATE() - INTERVAL 30 DAY);

대량의 데이터를 삭제할 때는 삭제 전 반드시 SELECT 문으로 대상 레코드를 먼저 확인하고, 필요하다면 트랜잭션을 활용해 안전하게 작업하는 것이 좋습니다.