2011-08-19 3 views
1

사용자 테이블에 대한 일반 AFTER UPDATE 트리거를 사용하여 열이 변경되었는지 확인하고, 그렇다면 저장 프로 시저를 호출하십시오.MYSQL 트리거 재귀 방지

문제는 저장 프로 시저가 일부 계산을 수행하며 사용자의 필드를 업데이트한다는 것입니다.

저장 프로 시저가 트리거를 호출하는 사용자 테이블을 업데이트하면 저장 프로 시저를 다시 호출하는 재귀를 어떻게 피할 수 있습니까?

감사합니다.

+0

mysql이 허용하는 것은 다음과 같습니다 : -S – zerkms

답변

1

MySQL은 당신이 (삭제하고이를 다시없이) 트리거를 해제하지 않습니다,하지만 당신은 몇 가지 옵션이 있습니다

  1. 프로 시저 내에서 사용자 테이블을 업데이트하지 마십시오을.
  2. 프로 시저가 업데이트시 특정 값으로 설정할 필드를 사용자에게 추가합니다. 트리거가 해당 필드에 해당 값을 볼 때 프로 시저를 호출하지 마십시오.
  3. 위와 같은 작업을 수행하기 위해 전역 변수를 사용하십시오 (연결 안 됨 - 모든 연결에 대해 트리거를 사용하지 않음).
+0

# 3의 경우 세션 변수 (즉, @@ var 대신에 @ var)를 사용하는 것이 더 좋을 것입니다. (즉, 트리거와 proc에서 IF IFNULL (@unique_recurse_var, 0) = 0에서 잠재적 인 재귀 코드를 지켜라.) 그런 다음 @unique_recurse_var = 1; <보호 된 작업>; ELSE SET @unique_recurse_var = 0; END IF;'). 아마 unittests가 functality 결코 깰 수 있는지 확인 싶어요. – CSTobey