2009-10-17 3 views
11

트리거를 설정하여 예측 필드가 = 3이면 트리거가 값을 4로 변경하고 데이터베이스에 저장합니다. 방아쇠가 아래에 있습니다.저장된 트리거를 호출 한 문이 이미 mysql 트리거 저장된 트리거를 사용했습니다

#1442 - Can't update table 'tzanalytic\_forecast\_cached' in stored 
function/trigger because it is already used by statement which invoked 
this stored function/trigger. 

이 올바른 방법을 설정 : 내가 말하는 오류가 계속 어떤 이유

?

delimiter $$ 
CREATE TRIGGER no_BoW BEFORE UPDATE ON t FOR EACH ROW 
BEGIN set @prediction = new.prediction; 
UPDATE t SET t.prediction = (SELECT IF(@prediction = '3', '4', @prediction)) WHERE t.event_id = new.event_id AND t.price_tier = new.price_tier; END; 
$$ delimiter ; 

답변

41

MySQL 트리거는 할당 된 테이블을 조작 할 수 없습니다. 다른 모든 주요 DBMS가이 기능을 지원하므로 MySQL이 곧이 지원을 추가하게됩니다.

http://forums.mysql.com/read.php?99,122354,240978#msg-240978

+0

감사합니다. - 당신이 나를 도왔습니다. – Skeen

+1

그리고 나, 그게 아주 짜증나는 버그 야. – jdborg

+8

매일 매일 나는 더 싫어한다. –

0

또한, 당신은 당신이 다른 절차 또는이 특정 절차에 할당하는 테이블에 업데이트를 수행하거나 재귀에 결국 기능이없는 것을 확인해야합니다. 예를 들어

create trigger trig1 After update on table1 FOR EACH ROW 
BEGIN 
UPDATE table2 SET colum1 = column1 + 1 
END; 

create trigger trig2 After update on table2 FOR EACH ROW 
BEGIN 
UPDATE table1 SET colum2 = column2 + 1 
END; 

이렇게되면 재귀가 종료되므로 기존 저장 프로 시저 및 함수를주의해야합니다.

관련 문제