찾다

 >  Q&A  >  본문

MySQL: 이 저장된 함수/트리거를 호출하는 문에서 이미 사용하고 있으므로 저장된 함수/트리거의 'order' 테이블을 업데이트할 수 없습니다.

Null인 MySQL 데이터베이스에 orders 的表。在我们收到资金之前, payment_date라는 속성이 있는데, 이 속성은 날짜로 업데이트됩니다. Payment_date 속성이 업데이트되면 order_state 속성이 (수동으로!) 1 또는 2를 값 3으로 업데이트합니다.

이 프로세스를 자동화하기 위해 트리거를 만들고 싶습니다. 내 시도는 다음과 같습니다.

으아악

전화하면 다음과 같은 오류 메시지가 나타납니다.

[HY000][1442] 无法更新存储函数/触发器中的表“orders”,因为它已被调用此存储函数/触发器的语句使用。[HY000][1442] 이 저장된 함수/트리거를 호출하는 문에서 이미 사용하고 있으므로 저장된 함수/트리거의 'orders' 테이블을 업데이트할 수 없습니다.

잠금 상황(또는 무한 루프 위험)이 발생할 수 있다는 점을 고려하여 트리거를 BEFORE UPDATEBEFORE UPDATE로 변경했습니다. 그러나 동일한 오류 메시지가 나타났습니다.

이 문제를 어떻게 해결할 수 있나요?

감사합니다!

P粉282627613P粉282627613293일 전567

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

  • P粉724737511

    P粉7247375112024-02-05 10:14:31

    알겠습니다. 위에서 트리거를 생성하는 행만 업데이트하면 된다고 언급했으므로 트리거 본문에서 UPDATE를 사용하지 않고도 이 작업을 수행할 수 있습니다.

    으아악

    설정NEW.은 트리거가 생성된 해당 행에만 적용됩니다.

    트리거 본문은 FOR EACH ROW로 표시된 한 번에 한 행을 처리합니다. 따라서 이 트리거를 생성하는 FOR EACH ROW 指示。因此,如果生成此触发器的 UPDATE 작업에 여러 행이 포함된 경우 한 번에 한 행이 처리됩니다.

    NEW. 的任何值需要使用 BEFORE 触发器。一旦 AFTER 값을 변경하려면 BEFORE 트리거를 사용해야 합니다. AFTER 트리거가 실행되면 너무 늦어서 값을 변경할 수 없습니다.

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