트리거(Trigger) 정의
트리거는 사전적 의미로는 '방아쇠'를 뜻한다.
방아쇠를 당기면 '자동'으로 총알이 나가듯이, 테이블에 무슨 일이 일어나면 '자동'으로 실행되는 것이다.
즉, 테이블에 부착되어서 테이블에 INSERT,UPDATE,DELETE 작업이 발생되면 자동으로 실행되는 코드를 뜻함.
트리거 명령어
# 생성
DELIMITER //
CREATE TRIGGER 트리거이름
{BEFORE:AFTER} {INSERT | UPDATE| DELETE } # 뒤의 조건(삽입,수정,삭제)이 발생하기 전/후
ON 테이블명 # 트리거를 부착할 테이블
FOR EACH ROW # 각 행마다 적용
BEGIN
트리거 내용
END //
# 수정은 불가
# 삭제
DROP TRIGGER
트리거가 생성하는 임시 테이블
NEW 테이블은 INSERT와 UPDATE 작업 시 변경할 새로운 데이터를 잠깐 저장해둠.
OLD 테이블은 DELETE와 UPDATE 작업 시 삭제 또는 변경되기 전의 예전 값을 저장해둠.
OLD.컬럼명, NEW.컬럼명 으로 사용 가능
기타 트리거
다중 트리거: 하나의 테이블에 동일한 트리거가 여러개 부착되어 있는 것을 뜻함.
중첩 트리거: 트리거가 또 다른 트리거를 작동하는 것을 뜻함.
EX) INSERT 트리거안에 UPDATE 트리거 작동.
My SQL에선 재귀 트리거는 지원하지 않음.
트리거 작동 순서
하나의 테이블에 여러개의 트리거가 부착되어 있으면, 작동 순서를 지정할 수 있음.
{ FOLLOWS : PRECEDES } 트리거 이름
# FOLLOWS로 지정하면, 지정한 트리거이름 다음에 현재 트리거 작동
# PRECEDES로 지정하면, 지정한 트리거이름 전에 현재 트리거 작동
트리거 특징 및 사용 이유
특징
- 직접 실행 불가. 해당 테이블에 이벤트가 발생할 경우에만 실행
- 하나의 트랜잭션으로 인식.
- 데이터 삽입 시 수정 트리거를 걸어놨을때 ROLLBACK 실행하면, 둘다 취소됨.
- 복잡성을 야기하여 유지보수의 어려움.
사용 이유
- 데이터의 무결성을 위해 사용
- 해당 테이블의 데이터가 삭제될때, 연관 테이블도 삭제해야한다던지 등의 경우에 사용
- 업무의 규칙을 보장
- 업무 처리 자동화
참조
'이것이 MySQL이다' 책 참조
'DB > MySQL' 카테고리의 다른 글
[MySQL] 쿼리 개선 ( QueryDSL Cross Join, full -> range scan, 커버링 인덱스 ) (1) | 2024.06.30 |
---|---|
DB Lock (s lock, x lock, index lock 등등) (0) | 2023.03.26 |
[DB] 스토어드 프로시저(SP)와 스토어드 함수 / MySQL 사용법 (0) | 2022.02.23 |
[DB] View / MySQL 사용법 (0) | 2022.02.23 |
[DB] 키(Key) 정리 / MySQL (0) | 2022.02.18 |
댓글