kjh00n의 기록저장소

트리거 (TRIGGER) 본문

DB

트리거 (TRIGGER)

kjh00n 2024. 11. 26. 09:47

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. 트리거 만들어보기

Table 생성

● 트리거 생성 ↓↓

TRIGGER 생성

DELIMITER //

CREATE TRIGGER [트리거명] [실행할 시점] [이벤트] ON [Table명]

FOR EACH ROW ('행 트리거'라는 의미)

BEGIN

[자동 실행될 SQL문];

END //

DELIMITER ;

Trigger 생성

 

● 트리거 정보 확인

→ SHOW TRIGGERS;

→ member Table에서 UPDATE가 발생하면 그 영향을 받은 행의 개수만큼 트리거가 실행

→ trig_test Table의 count 값이 +1이 된다.

 

● 트리거 실행후 Table 조회

번호가 1번인 행의 나이를 20살로 변경 = 데이터 1개만 바뀌기에 count에 +1

번호가 1,2번인 행의 나이를 30살로 변경 = 데이터가 2개가 바뀌기에 count에 +2

 

● 트리거 삭제

→ DROP TRIGGER [트리거명];

 

'DB' 카테고리의 다른 글

DB 암호화  (0) 2024.11.27
DB 계정 설정  (0) 2024.11.26
실습8  (0) 2024.11.25
변수, 저장 프로시저, 제어문, 저장 함수  (0) 2024.11.25
실습7  (0) 2024.11.22