트리거 문제 해결: 테이블 수정과의 비호환성
MySQL에서 트리거는 특정 이벤트를 기반으로 데이터베이스 작업을 자동화하는 데 사용되는 강력한 도구입니다. 그러나 트리거 실행 중에 문제가 발생하면 문제 해결이 중요합니다. 이 문서에서는 MySQL 트리거가 작동하지 않을 때 발생하는 일반적인 오류를 다룹니다.
문제 설명:
사용자가 트리거가 특정 열(PTS)을 업데이트하지 않는다고 보고했습니다. ) pos_table의 해당play_games 열이 변경된 경우. 쿼리가 수동으로 작동했음에도 불구하고 트리거가 업데이트를 트리거하지 못했습니다.
트리거 구조:
CREATE TRIGGER `upd_PTS` AFTER UPDATE ON `pos_table` FOR EACH ROW BEGIN IF (NEW.played_games <> OLD.played_games) THEN update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1)); END IF; END
발생한 오류:
played_games 열을 수동으로 편집하려고 할 때 사용자에게 "이 저장 함수/트리거를 호출한 문에서 이미 사용하고 있기 때문에 저장된 함수/트리거의 테이블 pos_table을 업데이트할 수 없습니다."라는 오류가 표시되었습니다.
해결 방법:
이 문제는 트리거가 트리거 이벤트(played_games 업데이트)에서 참조된 동일한 테이블(pos_table)을 수정하려고 시도했다는 사실에서 발생했습니다. MySQL의 저장 프로그램 제한 사항에 설명된 대로 저장 함수 또는 트리거는 호출 문에서 이미 사용 중인 테이블을 수정할 수 없습니다.
대체 솔루션:
피하려면 이 문제는 대신 BEFORE INSERT 트리거를 사용하는 것이 좋습니다. 이 경우 트리거는 다음과 같이 수정될 수 있습니다.
CREATE TRIGGER `upd_PTS` BEFORE INSERT ON `pos_table` FOR EACH ROW BEGIN SET NEW.PTS = ((NEW.won_games*2)+(NEW.tie_games*1)); END
추가 고려 사항:
발생한 오류 외에도 기사에서는 다음과 같은 문제를 강조합니다. PTS와 같은 계산된 열을 저장합니다. 표시 시 다른 열에서 쉽게 계산할 수 있으므로 별도의 열로 저장하지 않는 것이 더 효율적이고 오류 발생 가능성도 낮을 수 있습니다.
위 내용은 MySQL에서 동일한 테이블을 수정하는 트리거 내부의 테이블을 업데이트할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!