안녕하세요. 서종현 전문가입니다.
MySQL에서 수전 전 값을 저장했다가 수정후에 다시 수정전 값으로 덮어쓰는 작업은 트리거로 구현할수있으나, 무한 루프나 충돌이 발생할수있어 주의해야 합니다. 일반적으로 BEFORE UPDATE 트리거에서 OLD값을 변수에 저장하고 AFTER UPDATE 트리거에서 그 값을 다시 UPDATE 하는 방식은 권장되지 않습니다. 왜냐하면 트리거 내에서 같은 테이블을 다시 수정하면 트리거 내에서 사용중인 데이터 오류가 발생할수있습니다.
해결방법으로는 :
트리거 내에서 직업 업데이트를 하지말고 애플리케이션 레벨에서 처리하거나,
수정전 값을 별도 로그 테이블에 저장하여 필요시 복구하거나,
트리거 내에서 조건문을 사용해 무한 반복을 방지하는 방법을 사용하세요
예를들어, BEFORE UPDATE 트리거에서 OLD값을 별도 테이블에 저장하고 필요시 그 테이블에서 값을 가져와 복원할수있습니다. 직접 트리거 내에서 자기 자신 테이블을 또 수정하는것은 피하는게 좋습니다.