복붙노트

[SQL] MySQL의 트리거 저장 트리거는 이미 저장 트리거를 호출 문에 의해 사용됩니다

SQL

MySQL의 트리거 저장 트리거는 이미 저장 트리거를 호출 문에 의해 사용됩니다

나는 업데이 트에 예측 필드 = 3 인 경우 트리거가 값을 4로 변경하고 데이터베이스에 저장되도록 트리거를 설정합니다. 트리거는 다음과 같습니다.

어떤 이유로 내가 말하는 오류가 계속 :

#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 ;

해결법

  1. ==============================

    1.MySQL의 트리거가 할당 된 테이블을 조작 할 수 있습니다. 다른 모든 주요 DBMS는이 기능을 너무 잘하면 MySQL은 곧이 지원을 추가 할 것입니다 지원합니다.

    MySQL의 트리거가 할당 된 테이블을 조작 할 수 있습니다. 다른 모든 주요 DBMS는이 기능을 너무 잘하면 MySQL은 곧이 지원을 추가 할 것입니다 지원합니다.

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

  2. ==============================

    2.또한, 당신은 당신이 다른 절차 또는이 특정 절차에 할당 또는 재귀에서 생을 마감하는 테이블에 업데이트를 수행하는 기능이없는 것을 확인해야합니다. 예를 들면

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

    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;
    

    이것은 재귀 결국 이렇게 저장된 기존의 프로 시저 및 함수에주의한다.

  3. from https://stackoverflow.com/questions/1582683/mysql-trigger-stored-trigger-is-already-used-by-statement-which-invoked-stored-t by cc-by-sa and MIT license