• 트리거(Trigger)
테이블에 대한 특정 이벤트에 반응해 자동으로 실행되는 작업
이벤트 : INSERT, UPDATE, DELETE
트리거 실행 시점을 이벤트 전(BEFORE)이나 이벤트 후(AFTER)로 지정하여 설정 = 활성화 시간
INSERT 전/후, UPDATE 전/후, DELETE 전/후
MySQL은 5.0.2버전부터 표준 트리거가 지원됨
데이터 상태의 관리를 자동화하는 데 사용
데이터 작업 제한, 작업 기록, 변경 작업 감사 등
• 제약사항
하나의 스키마에서 트리거의 이름은 중복 될 수 없음
하나의 테이블에는 동일한 활성화 시간 및 이벤트를 갖는 두 개의 트리거를 가질 수 없음
ex) INSERT 이벤트 전(BEFORE) 트리거 두 개 생성 불가능
• 트리거 종류
행 트리거
테이블 안의 영향을 받은 레코드(rows) 각각에 대해 실행
변경 전 또는 변경 후의 레코드(rows)는 OLD, NEW라는 가상 줄 변수를 이용해 사용 가능
문장 트리거
INSERT, UPDATE, DELETE 문에 대해 한번만 실행된다.
• OLD / NEW 키워드
트리거에 대한 MySQL의 확장 기능
트리거 본문 내에서 OLD.컬럼명 및 NEW.컬럼명 을 사용하면 트리거의 영향을 받는 행의 열에 액세스 가능
OLD : 이벤트가 일어나기 이전 데이터
NEW : 이벤트가 일어난 이후 데이터
대소문자를 구분하지 않음
이벤트에 따라 사용할 수 있는 키워드가 정해져 있음
INSERT : NEW
UPDATE : OLD , NEW
DELETE : OLD
• 트리거 생성
| mysql> DELIMITER // mysql> CREATE TRIGGER <트리거 이름> <활성화시간> <이벤트> ON <테이블명> FOR EACH ROW BEGIN 실행문 ; .... END // mysql> DELIMITER ; |
- 활성화 시간
트리거 실행 시점
BEFORE : 이벤트 발생 전에 실행
AFTER : 이벤트 발생 후에 실행
- 이벤트
트리거가 실행 될 이벤트 ( INSERT / UPDATE / DELETE )
- FOR EACH ROW
이벤트가 발생하면 레코드(rows) 당 한번씩 실행문 수행 = 행트리거
• 트리거 확인
mysql> SHOW TRIGGERS ;
• 트리거 삭제
mysql> DROP TRIGGER <트리거 이름>;
'Linux > SQL' 카테고리의 다른 글
| [DBMS] 저장 함수 실습 (0) | 2021.12.08 |
|---|---|
| [DBMS] 저장 프로시저 실습 (0) | 2021.12.08 |
| [DBMS] 저장 함수 (Stored Function) (0) | 2021.12.08 |
| [DBMS] 저장 프로시저 (Stored Procedure) (0) | 2021.12.08 |
| [DBMS] 변수 실습 (0) | 2021.12.08 |