집 >데이터 베이스 >MySQL 튜토리얼 >트리거 내부의 테이블을 업데이트하면 오류 #1442가 발생하는 이유는 무엇이며, 이 문제를 어떻게 해결할 수 있습니까?
트리거 함정: 트리거가 참조하는 테이블 업데이트
트리거 내에서 동일한 테이블을 업데이트하면 문제가 발생할 수 있습니다. 업데이트 후에 실행되는 트리거를 사용하여 products_score 테이블을 업데이트하려고 시도하는 인스턴스 중 하나가 제공됩니다.
제공된 코드에 표시된 대로 트리거는 다음을 기반으로 vote_total 열을 계산하고 업데이트하려고 시도합니다. 동일한 products_score 테이블에 있는 다른 열(votes_1, votes_2, ..., vote_5)의 값. 그러나 이 업데이트가 트리거되면 오류가 발생합니다.
#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
해결책: BEFORE 트리거 사용
이 문제를 해결하려면 트리거를 다음과 같이 수정해야 합니다. 행 업데이트 이후가 아니라 행 업데이트 이전에 실행됩니다. 업데이트 전에 실행하면 트리거가 vote_total 열에 할당되는 새 값에 액세스하고 수정할 수 있습니다.
BEFORE 업데이트 절을 사용하여 수정된 트리거는 다음과 같습니다.
CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score FOR EACH ROW BEGIN SET new.votes_total = new.votes_1 + new.votes_2 + new.votes_3 + new.votes_4 + new.votes_5; END;
이 수정을 통해 트리거는 실제 행 업데이트가 발생하기 전에 vote_total 열을 성공적으로 계산하고 업데이트하여 오류를 해결하고 원하는 기능을 허용합니다.
위 내용은 트리거 내부의 테이블을 업데이트하면 오류 #1442가 발생하는 이유는 무엇이며, 이 문제를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!