kjh00n의 기록저장소

DB EVENT 본문

세미프로젝트

DB EVENT

kjh00n 2024. 12. 3. 20:30

https://velog.io/@jikgagman/mysql-60%EC%9D%BC-%EB%92%A4%EC%97%90-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9E%90%EB%8F%99-%EC%82%AD%EC%A0%9C

 

mysql 60일 뒤에 데이터 자동 삭제

유실물 관리 프로그램을 만들던 중.등록된 유실물 정보를 삭제하거나, 이관처리(본인인도, 타역/경찰서이관)하였을 때, 해당 정보는 각각의 테이블로 이동하게 된다. 이 정보를 일정시간동안 저

velog.io


DB EVENT

특정 데이터를 자동으로 삭제하는 이벤트를 설정하려면 MySQL이나 MariaDB에서 **EVENT**를 사용할 수 있습니다. EVENT는 일정 시간에 따라 주기적으로 실행되는 작업을 설정할 수 있는 MySQL 기능입니다.

아래는 특정 데이터를 삭제하는 이벤트를 설정하는 간단한 예시입니다.

예시: 특정 조건에 맞는 데이터를 삭제하는 이벤트 설정

  1. 이벤트 활성화 먼저 MySQL이나 MariaDB에서 이벤트 기능을 활성화해야 합니다. event_scheduler 변수가 ON 상태여야 합니다.
  2. sql 코드 복사 SET GLOBAL event_scheduler = ON;
  3. 이벤트 생성 예를 들어, orders라는 테이블에서 created_at 컬럼의 날짜가 7일 이상된 데이터를 자동으로 삭제하는 이벤트를 생성한다고 가정해 보겠습니다.이 예시에서는 orders 테이블에서 created_at 컬럼이 현재 시간에서 7일 이상 지난 데이터를 매일 자동으로 삭제하는 이벤트를 설정한 것입니다.
  4. sql 코드 복사 CREATE EVENT delete_old_orders ON SCHEDULE EVERY 1 DAY -- 매일 실행 DO BEGIN DELETE FROM orders WHERE created_at < NOW() - INTERVAL 7 DAY; END;

설명

  • CREATE EVENT delete_old_orders: delete_old_orders라는 이름의 이벤트를 생성합니다.
  • ON SCHEDULE EVERY 1 DAY: 매일 한 번씩 실행되도록 설정합니다. 주기를 바꾸려면 EVERY 뒤에 시간을 수정할 수 있습니다. 예: EVERY 1 HOUR는 매시간 실행됩니다.
  • DELETE FROM orders WHERE created_at < NOW() - INTERVAL 7 DAY;: created_at이 현재 날짜에서 7일 이상 지난 데이터를 삭제하는 쿼리입니다.
  1. 이벤트 상태 확인
    sql
    코드 복사
    SHOW EVENTS;
    
  2. 생성된 이벤트가 제대로 작동하는지 확인하려면 다음 명령어를 사용합니다:
  3. 이벤트 비활성화
    sql
    코드 복사
    DROP EVENT delete_old_orders;
    
  4. 이벤트를 더 이상 사용하지 않으려면 삭제할 수 있습니다:

주의사항

  • 권한: 이벤트를 생성하려면 EVENT 권한이 필요합니다.
  • 서버 설정: 서버의 event_scheduler 설정이 ON이어야 이벤트가 실행됩니다.

이렇게 설정한 이벤트는 주기적으로 데이터를 자동으로 삭제하여 관리할 수 있게 도와줍니다.


내가 만든 예시

CREATE EVENT delete_old_sales -- event이름 --
ON SCHEDULE EVERY 1 DAY -- 매일 실행되도록 설정 --
DO
DELETE FROM sales -- 여기서부터 SQL문 --
WHERE SaleDate < CURDATE() - INTERVAL 3 MONTH; -- SaleDate가 현재날짜로부터 3개월 차이가 나면 삭제 --

↓ 얘는 다른 Table의 EVENT임

CREATE EVENT IF NOT EXISTS update_vacation_status
ON SCHEDULE EVERY 1 DAY STARTS '2024-12-01 00:00:00'  -- 이벤트 시작 시간 (이때부터 하루에 한 번 실행)
DO
UPDATE vacation
SET V_status = '휴가 중'
WHERE StartDate = CURDATE();  -- 시스템 날짜가 StartDate와 일치하는 경우

StartDate가 현재날짜와 동일하면 V_status가 '휴가 중'으로 UPDATE된다.

'세미프로젝트' 카테고리의 다른 글

구성한 네트워크  (0) 2024.12.04
DB 계정 권한 정리  (0) 2024.12.04
방화벽 구성  (0) 2024.12.03
DB 구성  (0) 2024.12.03
DB 이중화 옵션 (SLAVE에서 설정)  (0) 2024.11.28