-
[데이터베이스] Trigger 트리거데이터베이스 2024. 10. 6. 19:50
Trigger는 MYSQL 에서 테이블에서 어떤 이벤트가 발생 했을 때 자동으로 실행되는 것을 말한다
이벤트 리스너라고 이해하면 된다
다시 말해,
어떤 테이블에서 특정한 이벤트가 발생했을때 (연산 inser, delete, update 등등)
실행시키고자 하는 추가 쿼리 작업들을 자동으로 수행할 수 있게끔 트리거를 미리 설정해 두는 것이다
(테이블에 부착되는 프로그램 코드)
MYSQL은 View에 트리거 부착이 불가능하다고 한다
트리거 종류
행 트리거
- 테이블 안의 영향을 받은 행 각각에 대해 실행 된다
- 변경 전 행이나 변경 후 행은 OLD, NEW 라는 가상 줄 변수를 사용하여 읽을 수 있다
여기에서 OLD 는 이름의 뜻처럼 예전 데이터 라는 의미이며 delete로 삭제되 데이터나 update로 바뀌기전의 데이터
NEW 는 이름의 뜻처럼 새 데이터라는 의미이고 insert 로 삽입된 데이터 또는 update로 바뀐 데이터를 의미한다
더보기위 처럼 update 일 경우에는 OLD, NEW 둘다 쓸 수 있고
delete는 new 를 인식 X
insert는 OLD가 없다
문장 트리거
- INSERT, UPDATE, DELETE 문에 대해 한번만 실행된다
- 삽입, 갱신 또는 삭제되는 행 수에 관계없이 각 트랜잭션에 대해 명령문 레벨 트리거가 한 번 실행된다
BEFORE 또는 AFTER는 트리거가 실행되는 시기를 지정한다
AFTER 트리거 : 쿼리 이벤트 작동하기 후
BEFORE 트리거 : 쿼리 이벤트 작동하기 전 (미리 데이터를 확인 가능하다)
트리거 사용시 주의사항
1. 복잡한 로직으로 인한 성능 저하
- 트리거는 테이블의 각 행에 대해 실행될 수 있으므로, 복잡한 로직이나 많은 계산이 포함된 트리거는 성능을 저하시킬 수 있다
- 특히 많은 데이터가 수정될 때 트리거가 반복적으로 실행되어 데이터베이스 부하가 커질 수 있다
2. 트리거 간 상호작용
- 여러 트리거가 하나의 테이블에서 동시에 작동할 경우, 예상하지 못한 상호작용이 발생할 수 있습니다
- 예를 들어, BEFORE 트리거와 AFTER 트리거가 충돌하거나, 서로 다른 테이블의 트리거가 상호 의존하게 되면 유지보수가 매우 어려워집니다
트리거 사용
1. INSERT 트리거 예시
CREATE TRIGGER before_employee_insert BEFORE INSERT ON employees FOR EACH ROW SET NEW.created_at = NOW();
2. UPDATE 트리거 예시
CREATE TRIGGER after_employee_update AFTER UPDATE ON employees FOR EACH ROW INSERT INTO employee_update_log (employee_id, old_salary, new_salary, updated_at) VALUES (OLD.id, OLD.salary, NEW.salary, NOW());
3. DELETE 트리거 예시
CREATE TRIGGER before_employee_delete BEFORE DELETE ON employees FOR EACH ROW INSERT INTO employees_backup (employee_id, name, salary, deleted_at) VALUES (OLD.id, OLD.name, OLD.salary, NOW());
트리거는 생성된 후, 앞서 말한 것처럼 연산이 실행되면 자동으로 작동하는 구조입니다. 트리거는 직접 호출하지 않아도, 관련된 이벤트(INSERT, UPDATE, DELETE)가 발생하면 자동으로 실행된다.
트리거 확인
SHOW TRIGGERS;
트리거 삭제
DROP TRIGGER [IF EXISTS] 트리거_이름;
'데이터베이스' 카테고리의 다른 글
성장하자! - 트랜잭션 (0) 2025.03.19 [데이터베이스] index는 무엇인가 (1) 2024.08.09 [DB] 트랜잭션의 모든 것 (0) 2024.06.28 [데이터베이스] 정규화? 비정규화? (Normalization & De-normalization) (0) 2024.05.24