찾다

 >  Q&A  >  본문

MySQL 프로시저는 최신 레코드를 건너뜁니다.

다음 세 개의 테이블이 있습니다.

으아아아

다음 절차를 사용하여 두 테이블의 데이터를 다른 테이블에 병합하려고 합니다.

으아아아

hm_deliverylog 삽입 이벤트 이전에 트리거를 생성하고 다음과 같이 프로세스를 호출합니다. 으아아아

위 단계를 통해 hm_deliverylog 및 hmdeliverylog_recipients에 레코드가 생성되면 데이터를 병합하고 mlog에 새 레코드를 생성해야 합니다. 하지만 항상 첫 번째 레코드를 건너뛰고 1개의 레코드가 지연됩니다(죄송합니다. 제 영어 실력이 부족하여 이 상황을 설명할 수 없습니다). 다음과 같이 설명하겠습니다.

1 - 테이블 3개에 대한 모든 기록을 삭제했습니다

2- hm_deliverylog 및 hm_deliverylog_recipients

에 첫 번째 레코드를 삽입합니다.

3- mlog의 예상 기록: 생성되지 않음

4- hm_deliverylog 및 hm_deliverylog_recipients

에 두 번째 기록 생성

5- mlog에 두 개의 기록이 예상됩니다. 첫 번째 기록은 mlog에 생성되지만 두 번째 기록은 없습니다

6- hm_deliverylog 및 hm_deliverylog_recipients에 세 번째 기록을 생성했습니다

7 - mlog에 3개 기록 예상 : mlog에 두 번째 기록이 생성됐는데, 세 번째 기록은 없었어요

여기서 항상 mlog의 최신 기록보다 먼저 생성하고 최신 기록을 건너뜁니다.

트리거 이벤트를 AFTER INSERT로 변경해 보았으나 문제가 해결되지 않았습니다.

프로그램에서 처리한 처음 두 테이블에 레코드가 생성되었지만 제어할 수 없으며 이 문제를 해결하기 위한 해결 방법을 찾고 있습니다.

여기서 내가 무엇을 놓치고 있나요?

P粉550323338P粉550323338260일 전488

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

  • P粉294954447

    P粉2949544472024-04-04 16:33:24

    @Akina님 덕분에 이 문제를 해결했습니다.

    내 코드는 괜찮지만 논리 오류가 발생했습니다. hm_deliverylog(첫 번째 테이블)에서 프로시저를 호출하는 트리거를 생성 중입니다. 애플리케이션이 기본을 먼저 삽입하기 때문에 hm_deliverylog_recipients(두 번째 테이블)에서 트리거를 생성해야 합니다. 첫 번째 테이블에 데이터를 삽입한 다음 수신자 데이터를 두 번째 테이블에 삽입하므로 첫 번째 테이블에 트리거를 설정하면 실행되지만 두 번째 테이블을 확인하지만 두 번째 테이블에는 아직 레코드가 없습니다. 세 번째 테이블에 레코드 테이블을 생성하지 않습니다.

    두 번째 테이블에 트리거를 생성하면 제대로 작동합니다.

    알림을 보내주신 @Akina에게 다시 한 번 감사드립니다

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