2011-04-19 2 views
0

table2가 업데이트 될 때 table1의 일부 필드를 변경할 수있는 명령문이 필요합니다.업데이트 MySQL 트리거 전에 변경된 레코드로만 작업 할 수있는 방법이 있습니까?

I 현재 다음과 같은 코드가 있습니다

delimiter // 
CREATE TRIGGER check BEFORE UPDATE ON table2 
FOR EACH ROW 
BEGIN 
    IF NEW.Count <> OLD.Count THEN 
     ... 
    END IF; 
END// 
delimiter ; 

그러나, 표가 매우 큰 및 업데이트 이벤트가 많이있다, 그래서이 코드가 둔화 내 서버를 드릴 수 있습니다. 그래서 거기에 모든 레코드를 보지 않을 것입니다 어떤 해결책이 있는지 알고 싶습니다하지만, 오직 업데이 트가?

+0

값 비교하는 것을 의미 각 행 NEWOLD 참조로 단일 행에 대해 실행이므로

내부 블록은 new.count <> old.count가있는 업데이트를 위해 실행됩니다. 당신이 천천히 걱정한다면, 방아쇠가있을 때와없는 방아쇠를 놓고 큰 업데이트를하고, 너무 느려지는지 확인하십시오. – Johan

답변

0

트리거가 모든 레코드를 "확인"하지 않습니다. 트리거를 FOR EACH ROW으로 선언했기 때문에 하나의 행만 트리거에서 처리됩니다. 트리거 조건 NEW.Count <> OLD.Count 단순히 두 (단순) 열은 코드가 정확하게는 그 수행 @user

+0

@ a-horse-with-no-name, 저는 다음을 이해했습니다 : 트리거는 각 업데이트 된 레코드에 대해 작동합니다. 그래서 건설은 테이블의 모든 레코드가 아니라 모든 업데이트 된 레코드를 조작합니다. 그게 무슨 뜻이야? – JEXcome

+0

@ JEXcom : 수정하십시오. 트리거는 수정 된 각 행에 대해서만 호출됩니다. –

관련 문제