이 문제에 관해 포럼에 많은 내용이 있어 다시 질문을 하게 되어 죄송합니다. 하지만 내 문제가 다른 사람들과 다르기를 바랍니다. 내 하찮은 영어 실력에 죄송하다는 말씀을 드리고 싶습니다.
먼저 테이블이 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粉6396675042024-02-04 20:57:10
방아쇠에는 아무런 문제가 없는 것 같습니다. 나는 그것을 테스트했고 작동하고 있습니다. 완료하기 위해 테이블에 삽입 트리거를 추가했습니다 区域
.
보시다시피 삽입 및 삭제 작업 모두 그에 따라 값이 업데이트됩니다.
-- 여기에서 업데이트됨 --
이는 경고 메시지 역할을 하고 작업을 종료하는 오류를 발생시키는 데 사용되는 트리거 after_insert_area_location
的增强版本,我将在其中演示新添加的 IF 语句以保持数据完整性。请注意,SIGNAL
문입니다.
보시다시피 트리거의 IF
语句中的 SIGNAL
语句引发了一个错误,其中包含 SQL_STATE 代码 77777
및 메시지:가 미리 설정되어 있습니다. 그러면 새 행이 삽입된 이후 변경된 내용이 취소됩니다.
간단히 말하면, 트리거에서 IF 문을 사용하여 데이터 흐름을 어느 정도 제어할 수 있습니다. SIGNAL 문을 사용하면 의도적으로 오류를 호출하여 트리거 실행을 중지/실행 취소하고 트리거 작업을 시작할 수 있습니다. 위에서 언급한 것처럼 트리거의 UPDATE
没有执行,引发触发器的 insert
문도 실행 취소되는 것이 아닙니다.