kjh00n의 기록저장소
DB EVENT 본문
DB EVENT
특정 데이터를 자동으로 삭제하는 이벤트를 설정하려면 MySQL이나 MariaDB에서 **EVENT**를 사용할 수 있습니다. EVENT는 일정 시간에 따라 주기적으로 실행되는 작업을 설정할 수 있는 MySQL 기능입니다.
아래는 특정 데이터를 삭제하는 이벤트를 설정하는 간단한 예시입니다.
예시: 특정 조건에 맞는 데이터를 삭제하는 이벤트 설정
- 이벤트 활성화 먼저 MySQL이나 MariaDB에서 이벤트 기능을 활성화해야 합니다. event_scheduler 변수가 ON 상태여야 합니다.
- sql 코드 복사 SET GLOBAL event_scheduler = ON;
- 이벤트 생성 예를 들어, orders라는 테이블에서 created_at 컬럼의 날짜가 7일 이상된 데이터를 자동으로 삭제하는 이벤트를 생성한다고 가정해 보겠습니다.이 예시에서는 orders 테이블에서 created_at 컬럼이 현재 시간에서 7일 이상 지난 데이터를 매일 자동으로 삭제하는 이벤트를 설정한 것입니다.
- 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일 이상 지난 데이터를 삭제하는 쿼리입니다.
- 이벤트 상태 확인
sql 코드 복사 SHOW EVENTS;
- 생성된 이벤트가 제대로 작동하는지 확인하려면 다음 명령어를 사용합니다:
- 이벤트 비활성화
sql 코드 복사 DROP EVENT delete_old_orders;
- 이벤트를 더 이상 사용하지 않으려면 삭제할 수 있습니다:
주의사항
- 권한: 이벤트를 생성하려면 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 |