>데이터 베이스 >MySQL 튜토리얼 >트리거 내부의 테이블을 업데이트하면 오류 #1442가 발생하는 이유는 무엇이며, 이 문제를 어떻게 해결할 수 있습니까?

트리거 내부의 테이블을 업데이트하면 오류 #1442가 발생하는 이유는 무엇이며, 이 문제를 어떻게 해결할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-23 03:03:33248검색

Why Does Updating a Table Inside a Trigger Cause Error #1442, and How Can This Be Solved?

트리거 함정: 트리거가 참조하는 테이블 업데이트

트리거 내에서 동일한 테이블을 업데이트하면 문제가 발생할 수 있습니다. 업데이트 후에 실행되는 트리거를 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.