집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 트리거로 인한 테이블 업데이트 오류를 해결하는 방법은 무엇입니까?
업데이트 후 자체 트리거 내에서 동일한 테이블을 업데이트하려고 할 때 일반적인 문제가 발생합니다. 이는 동일한 행 내의 다른 열에 대한 변경 사항을 기반으로 테이블의 특정 열을 수정하도록 트리거가 설계되었을 때 더욱 분명해집니다.
다음 시나리오를 고려해보세요. 점수가 나올 때마다 "products_score" 테이블의 "votes_total" 열을 업데이트하려고 합니다. 수정됨:
CREATE TRIGGER upd_total_votes AFTER UPDATE ON products_score FOR EACH ROW UPDATE products_score SET products_score.votes_total = (SELECT (votes_1 + votes_2 + votes_3 + votes_4 + votes_5) FROM products_score WHERE id = new.id)
그러나 테이블에서 업데이트를 실행하면 오류가 발생합니다.
#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
이 오류는 트리거 논리의 순환 참조로 인해 발생합니다. 업데이트 문은 트리거가 새 총계를 계산하기 위해 사용하는 "votes_total" 열을 수정하려고 시도합니다.
이 문제를 피하려면 트리거를 다음과 같이 수정할 수 있습니다. 업데이트 이후 대신 업데이트 이전에 실행:
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 ;
이 수정된 트리거에서는 새로운 "votes_total" 값을 계산하고 할당합니다. 실제 업데이트가 발생하기 전에 "새" 행 개체에 추가합니다. 이를 통해 순환 참조 문제 없이 업데이트 문을 진행할 수 있습니다.
위 내용은 MySQL 트리거로 인한 테이블 업데이트 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!