13. SQL trigger
Trigger
- 데이터베이스에서 어떤 이벤트가 발생했을 때 자동적으로 실행되는 프로시저(procedure)
- 데이터에 변경이 생겼을 때, 즉, DB에 insert, update, delete가 발생했을 때 이것이 계기가 되어 자동적으로 실행되는
프로시저
update users set nickname = '쉬운코드' where id = 1; ->
trigger는 table에서 변화가 일어날 때마다 통계를 계산해주고 싶을 때 계산하는 용도로 사용될 수 있음.
- update, delete, insert 등을 한번에 감지하도록 설정이 가능함. (MySQL은 불가능)
위 예시에서 트리거가 한번만 작동하도록 바꿔주려면
FOR EACH ROW 를 FOR EACH STATEMENT로 바꿔주면 됨.
-> row 단위가 아니라 statement 단위로 trigger가 실행될 수 있도록 할 수 있음.
(MySQL에선 FOR EACH STATEMENT 사용 불가능)
- trigger를 발생시킬 디테일한 조건을 지정할 수 있음. (MySQL은 불가능)
새롭게 업데이트한 닉네임이 기존의 닉네임과 같지 않을 때에만 트리거를 작동하도록 하는 조건을 지정함.
trigger 사용 시 주의사항
- 소스 코드로는 발견할 수 없는 로직이기 때문에 어떤 동작이 일어나는지 파악하기 어렵고 문제 발생시 대응이 어려움.
(procedure의 경우는 소스 코드에서 호출하는 코드라도 존재하기 때문에 파악이 가능하지만 trigger는 직접 호출하지 않기 때문에 가시적이지 않아서 개발, 관리, 문제 파악이 모두 힘듦)
- trigger를 지나치게 많이 사용하게 되면, 어떤 이벤트로 인해 트리거가 작동하고, 이 트리거로 인해 다른 트리거가 작동하고, 이 트리거가 또다른 트리거를 작동시키는 등 연쇄적인 작동이 발생할 수 있어서 파악이 힘듦.
- 과도한 trigger 사용은 DB에 부담을 주고 응답을 느리게 만듦.
- 디버깅이 어려움
- 문서 정리가 매우 중요함
출처 : https://www.youtube.com/watch?v=mEeGf4ZWQKI&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=13