찾다

 >  Q&A  >  본문

업데이트 삭제 후 MySQL 트리거가 작동하지 않습니다.

이 문제에 관해 포럼에 많은 내용이 있어 다시 질문을 하게 되어 죄송합니다. 하지만 내 문제가 다른 사람들과 다르기를 바랍니다. 내 하찮은 영어 실력에 죄송하다는 말씀을 드리고 싶습니다.

먼저 테이블이 2개 있습니다(상위 테이블과 하위 테이블). 부모(위치)

loc_id loc_size
1 100
2 75

어린이(지역)

ar_id ar_loc_id ar_size
1 2 35
2 2 40

이것은 삭제 후 트리거입니다.

으아아아

예를 들어 ar_id = '2'를 삭제하려는 경우 loc_size 위치에서 ar_size가 업데이트됩니다.

loc_size 값이 "0"이므로 트리거 실행 후 값은 40이 됩니다.

문제는 트리거가 올바르게 실행되지 않는다는 것입니다. 트리거가 실행된 후 loc_size가 전혀 업데이트되지 않고 "0" 값만 업데이트됩니다.

제가 뭔가 놓치고 있는 건가요, 아니면 단순히 작동하지 않아서 문제가 발생한 건가요?

이 문제를 해결하도록 도와주세요. 매우 감사합니다.

P粉155832941P粉155832941298일 전364

모든 응답(1)나는 대답할 것이다

  • P粉639667504

    P粉6396675042024-02-04 20:57:10

    방아쇠에는 아무런 문제가 없는 것 같습니다. 나는 그것을 테스트했고 작동하고 있습니다. 완료하기 위해 테이블에 삽입 트리거를 추가했습니다 区域.

    으아악

    보시다시피 삽입 및 삭제 작업 모두 그에 따라 값이 업데이트됩니다.
    -- 여기에서 업데이트됨 --

    이는 경고 메시지 역할을 하고 작업을 종료하는 오류를 발생시키는 데 사용되는 트리거 after_insert_area_location 的增强版本,我将在其中演示新添加的 IF 语句以保持数据完整性。请注意,SIGNAL 문입니다.

    으아악

    보시다시피 트리거의 IF 语句中的 SIGNAL 语句引发了一个错误,其中包含 SQL_STATE 代码 77777 및 메시지:가 미리 설정되어 있습니다. 그러면 새 행이 삽입된 이후 변경된 내용이 취소됩니다.

    으아악

    간단히 말하면, 트리거에서 IF 문을 사용하여 데이터 흐름을 어느 정도 제어할 수 있습니다. SIGNAL 문을 사용하면 의도적으로 오류를 호출하여 트리거 실행을 중지/실행 취소하고 트리거 작업을 시작할 수 있습니다. 위에서 언급한 것처럼 트리거의 UPDATE 没有执行,引发触发器的 insert 문도 실행 취소되는 것이 아닙니다.

    회신하다
    0
  • 취소회신하다