트리거
트리거(Trigger)는 데이터베이스에서 특정 이벤트가 발생했을 때 자동으로 실행되는 프로그램 또는 명령어 집합이다.
트리거는 주로 데이터의 무결성과 일관성을 유지하고, 특정 비즈니스 로직을 자동으로 수행하기 위해 사용된다.
예를 들어, 새로운 데이터가 삽입되거나 기존 데이터가 수정 또는 삭제될 때 자동으로 트리거가 실행되도록 설정할 수 있다.
트리거는 DML 트리거와 DDL 트리거로 구분된다.
DML 트리거는 INSERT, UPDATE, DELETE 같은 DML 작업이 수행될 때 실행됩니다. 고객이 주문을 새로 추가할 때 재고 수량을 업데이트하거나, 특정 컬럼이 변경되면 로그를 기록하는 등의 작업을 수행할 수 있다.
DDL 트리거는 CREATE, ALTER, DROP 등 DDL 명령어가 실행될 때 작동한다. 테이블 구조가 변경될 때마다 자동으로 백업을 생성하거나 특정 보안 규칙을 적용할 수 있다.
트리거는 주로 데이터 무결성을 유지하는 용도로 사용되며, 비즈니스 규칙을 데이터베이스 레벨에서 강제하고자 할 때 유용하다.
이벤트 스케줄러
이벤트 스케줄러는 데이터베이스에서 특정 작업을 미리 설정한 시간이나 주기에 맞춰 자동으로 실행하도록 해주는 기능이다. 보통 MySQL 같은 관계형 데이터베이스에서 제공하며, 반복적인 작업을 자동화하고 시스템 부하가 적은 시간에 작업을 수행하게 한다. 이벤트 스케줄러로 설정된 작업을 이벤트라고 한다.
이벤트 스케줄러의 주요 특징
- 주기적 실행: 정해진 시간마다 반복되는 작업을 설정할 수 있다. 예시로 매일 자정에 테이블의 로그 데이터를 삭제하거나 백업할 수 있다.
- 일회성 실행: 특정 날짜와 시간에 한 번만 실행되도록 설정할 수 있다. 예시로 특정 날짜에 재고를 업데이트하는 작업을 수행할 수 있다.
- 비동기 작업 수행: 데이터베이스 내부에서 자동으로 실행되므로 별도의 외부 스크립트나 크론 작업을 설정할 필요가 없다.
- 관리 용이성: CREATE EVENT와 같은 SQL 문을 통해 쉽게 설정하고, ALTER EVENT나 DROP EVENT를 통해 수정하거나 삭제할 수 있다.
이벤트 스케줄러 사용 예시
MySQL에서는 SET GLOBAL event_scheduler = ON; 명령을 통해 이벤트 스케줄러를 활성화한다.
매일 자정에 user 테이블에서 30일이 지난 로그 데이터를 자동으로 삭제하는 이벤트를 생성하려면 다음과 같은 SQL 문을 사용한다.
CREATE EVENT delete_old_logs
ON SCHEDULE EVERY 1 DAY
STARTS '2024-11-14 00:00:00'
DO
DELETE FROM USER WHERE log_date < NOW() - INTERVAL 30 DAY;
2024년 12월 1일 오전 5시에 특정 테이블의 데이터를 업데이트하는 일회성 이벤트는 다음과 같이 설정한다.
CREATE EVENT update_inventory
ON SCHEDULE AT '2024-12-01 05:00:00'
DO
UPDATE inventory SET stock = stock + 100 WHERE product_id = 1234;
이벤트 스케줄러 관리
- 확인: SHOW EVENTS;를 사용하여 현재 설정된 이벤트를 확인할 수 있다.
- 수정: ALTER EVENT로 이벤트를 수정한다.
- 삭제: DROP EVENT로 이벤트를 삭제할 수 있다.
'DB' 카테고리의 다른 글
MySQL vs PostgreSQL (1) | 2024.11.28 |
---|---|
[MyBatis] MyBatis 개념 및 구조 (1) | 2024.11.04 |
DAO 고도화, 트랜잭션 관리 (0) | 2024.10.18 |
[Oracle] DB 계정 생성 후 연동하기 (0) | 2024.10.04 |
[DBMS] 정규화 정리 (0) | 2024.08.12 |