[MySQL] 트리거, 이벤트 스케줄러

2020. 9. 30. 17:14Database/MySQL

1. 트리거 (Trigger)

1) 트리거

테이블에 대한 특정 이벤트(INSERT, UPDATE, DELETE)에 반응해 자동으로 실행되는 작업이다. 트리거 실행 시점을 이벤트 전이나 후로 지정하여 설정이 가능하다. MySQL은 5.0.2버전부터 표준 트리거가 지원되며, 데이터 상태의 관리(데이터 작업 제한, 작업 기록, 변경 작업 감사 등)를 자동화하는데 사용한다. 제약사항으로는, 하나의 스키마에서 트리거의 이름은 중복될 수 없으며 동일한 활성화 시간 및 이벤트를 갖는 두 개의 트리거를 가질 수 없다.

2) 트리거 종류 

종류 설명
행 트리거 테이블 안의 영향을 받은 레코드 각각에 대해 실행한다. 변경 전 또는 후의 레코드는 OLD, NEW라는 가상 줄 변수를 이용해 사용이 가능하다.
문장 트리거 INSERT, UPDATE, DELETE 문에 대해 한번만 실행된다.

3) OLD, NEW

트리거에 대한 MySQL의 확장 기능이다. 트리거 본문 내에서 'OLD.컬럼명' 및 'NEW.컬럼명'을 사용하면 트리거의 영향을 받는 행의 열에 액세스 가능하다. OLD의 경우 이벤트가 일어나기 이전 데이터이며, NEW는 이벤트가 일어난 후의 데이터이다. 대소 문자를 구분하지 않으며 이벤트에 따라 사용할 수 있는 키워드가 정해져 있다.

이벤트 키워드
INSERT NEW
UPDATE OLD, NEW
DELETE OLD

4) 트리거 사용법

FOR EACH ROW는 행 트리거로, 이벤트가 발생할 경우 레코드당 한번씩 실행문이 수행되도록 설정할 수 있다.

// 기본 사용법
mysql> DELIMITER //
mysql> CREATE TRIGGER [TRIGGER명] [활성화시간] [이벤트] ON [TABLE명]
  FOR EACH ROW
  BEGIN
    [실행문];
  END //
mysql> DELIMITER ;

// 트리거 확인
mysql> SHOW TRIGGERS;
mysql> SHOW CREATE TRIGGER [TRIGGER명];

// 트리거 삭제
mysql> DROP TRIGGER [TRIGGER명];

 

 

 

2. 이벤트 스케줄러 (Event Scheduler)

1) 이벤트 스케줄러

작업 스케줄러로 매년 1월 1일 특정 테이블을 초기화 시켜야 한다. 시간 당 한번씩 세션 테이블을 초기화한다.

2) 이벤트 스케줄러 사용법

// 기본 사용법
mysql> CREATE EVENT [IF NOT EXISTS] [EVENT명]
  ON SCHEDULE [SCHEDULE]
  [ON COMPLETION [NOT] PRESERVE]
  [ENABLE | DISABLE]
  [COMMENT '주석']
  DO [BEGIN] [실행문]; [실행문]; [END]
  
// 이벤트 스케줄러 확인
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;

항목 설명
[SCHEDULE] 작성법 AT 타임 [+INTERVAL 간격 [+INTERVAL 간격...]]
- EVERY 간격 [STARTS타임] [ENDS타임]
[SCHEDULE]의 [INTERVAL 간격]  YEAR|QUARTER|MONTH|DAY|HOUR|MINUTE|WEEK|SECOND|YEAR_MONTH|DAY_HOUR|DAY_MINUTE|DAY_SECOND|HOUR_MINUTE|HOUR_SECOND|MINUTE_SECOND
[SCHEDULE]의 [INTERVAL 간격]의 [타임] CURRENT_TIMESTAMP|년월일시의 리터럴
mysql> CREATE EVENT IF NOT EXISTS evt_sessionClean
  ON SCHEDULE
  EVERY 3 DAY_HOUR
  COMMENT 'Clean up session at 03:00 daily'
  DO
  DELETE FROM admin.user_session;

[참고] Database - Practice - 트리거

728x90

'Database > MySQL' 카테고리의 다른 글

[MySQL] 백업 및 복구  (0) 2020.10.01
[MySQL] 저장 프로시저, 저장 함수  (0) 2020.09.30
[MySQL] 인덱스, 변수  (0) 2020.09.29
[MySQL] 뷰, 트랜잭션  (0) 2020.09.29