mysql 트리거에 대한 질문입니다.
mysql에서 수정이 되기전 값을 저장 했다가 수정이 끝나고 수정전 값을 수정된 값에 덮어버리는 방법이 있을까요?
(현재 트리거가 실행되면 나오는 오류가 사용중인 데이터를 트리거로 못한다라고 나오고 있습니다)
안녕하세요. 김민규 전문가입니다.
말씀하신 방법은 원천적으로는 불가능한 방법이긴 합니다.
혹시 트리거 대신 앱에서 바로 로직 처리를 하거나 백업 테이블을 만드는 방법이 있겠습니다.
안녕하세요. 서종현 전문가입니다.
MySQL에서 수전 전 값을 저장했다가 수정후에 다시 수정전 값으로 덮어쓰는 작업은 트리거로 구현할수있으나, 무한 루프나 충돌이 발생할수있어 주의해야 합니다. 일반적으로 BEFORE UPDATE 트리거에서 OLD값을 변수에 저장하고 AFTER UPDATE 트리거에서 그 값을 다시 UPDATE 하는 방식은 권장되지 않습니다. 왜냐하면 트리거 내에서 같은 테이블을 다시 수정하면 트리거 내에서 사용중인 데이터 오류가 발생할수있습니다.
해결방법으로는 :
트리거 내에서 직업 업데이트를 하지말고 애플리케이션 레벨에서 처리하거나,
수정전 값을 별도 로그 테이블에 저장하여 필요시 복구하거나,
트리거 내에서 조건문을 사용해 무한 반복을 방지하는 방법을 사용하세요
예를들어, BEFORE UPDATE 트리거에서 OLD값을 별도 테이블에 저장하고 필요시 그 테이블에서 값을 가져와 복원할수있습니다. 직접 트리거 내에서 자기 자신 테이블을 또 수정하는것은 피하는게 좋습니다.
안녕하세요. 조일현 전문가입니다.
수정된 값을 덮는 것은 트리거의 작동 방식과 맞지 앉는 방식이며, 문제를 일으킬 가능성이 매우 높습니다.
트리거의 구체적인 코드와 어떤 테이블에 어떤 트리거가 설정되어 있는지에 대한 자세한 정보가 필요합니다.
트리거 코드 및 오류 메시지 등 전체 내용 확인이 필요합니다.