kjh00n의 기록저장소
트리거 (TRIGGER) 본문
1. 트리거 (Trigger)
● 특정 DB의 특정 Table에서 특정 이벤트(INSERT, UPDATE, DELETE)가 발생하는 경우 자동으로 특정 작업을 실행하게 만드는 기능
EX) 회원 정보가 추가되면 전체 인원수에 +1을 한다.
1-1. 트리거 제약사항
● 트리거의 이름은 중복이 불가능(DB안에서)
● 같은 대상의 같은 이벤트를 갖는 트리거는 복수가 불가능하다.
1-2. 트리거 설정
● 이벤트 : INSERT, UPDATE, DELETE
● 트리거 실행 시점 : 이벤트가 발생하기 전은 BEFORE, 발생 후에는 AFTER
● 트리거 종류
- ① 문장 트리거
- 이벤트 하나당 트리거 한번 실행
- 어떤 데이터가 이벤트에 영향을 받았는지 중요하지 않다.
- ② 행 트리거
- 이벤트로 인해 영향을 받은 행의 개수만큼 트리거 실행
- 어떤 데이터가 해당 이벤트에 영향을 받았는지 중요하기 때문에 파악할 필요가 있다.
※행 트리거를 더 많이 사용한다.
EX) UPDATE member SET age = 10;
→ 문장 트리거 : 트리거 한번 실행
→ 행 트리거 : 바뀐 정보가 10개라면 트리거도 10번 실행
1-3. 키워드
● OLD : 이벤트가 발생되기 전의 데이터
● NEW : 이벤트가 발생된 이후의 데이터
- INSERT는 NEW만 사용 가능
- UPDATE는 OLD, NEW 둘 다 사용 가능
- DELETE는 OLD만 사용 가능
원래 나이가 20살이였으면
EX) UPDATE member SET age = 10 WHERE no = 1;
● 20살 → 10살
● 트리거 사용해서 원래 나이 20살을 다른 테이블에 저장
→ INSERT INTO test (age) VALUES (OLD.age);
● OLD.age는 이벤트가 발생하기 전의 age
1-4. 트리거 만들어보기
● 트리거 생성 ↓↓
TRIGGER 생성
DELIMITER //
CREATE TRIGGER [트리거명] [실행할 시점] [이벤트] ON [Table명]
FOR EACH ROW ('행 트리거'라는 의미)
BEGIN
[자동 실행될 SQL문];
END //
DELIMITER ;
● 트리거 정보 확인
→ SHOW TRIGGERS;
→ member Table에서 UPDATE가 발생하면 그 영향을 받은 행의 개수만큼 트리거가 실행
→ trig_test Table의 count 값이 +1이 된다.
● 트리거 실행후 Table 조회
번호가 1번인 행의 나이를 20살로 변경 = 데이터 1개만 바뀌기에 count에 +1
번호가 1,2번인 행의 나이를 30살로 변경 = 데이터가 2개가 바뀌기에 count에 +2
● 트리거 삭제
→ DROP TRIGGER [트리거명];