재정의를 수행할 때 필드 및 조건의 유효성을 검사하는 방법
P粉448346289
P粉448346289 2024-01-10 18:06:26
0
1
418

중앙 서버와 d1, d2, d3, d4, d5와 같은 여러 지역 서버가 있습니다.

복사할 테이블이 몇 개 있습니다. 단순화를 위해 d1, d2, d3, d4, d5 및 c에 존재하고 모든 서버에서 동일한 구조를 갖는 tblFoo라는 테이블이 있다고 가정해 보겠습니다. 규칙은 간단합니다:

  • 서버 d에 레코드가 존재하면 각 필드에 대해 정확히 동일한 값을 갖는 레코드가 서버 c에도 존재합니다
  • 레코드가 d 서버(예: d1)에 존재하면 다른 d 서버(d2, d3, d4 또는 d5)에는 존재하지 않습니다.

d 서버에서 tblFoo에 변경 사항(삽입, 업데이트, 삭제)이 발생하면 C 서버에서도 즉시 변경되도록 하는 것이 목표입니다. 이는 삽입 작업에 매우 효과적입니다(pkFooID인 ID에는 정의에 따라 auto_increment 속성이 있기 때문입니다). 이는 업데이트 및 삭제 작업에도 적용되지만 이러한 작업에는 몇 가지 우려 사항이 있습니다. 코드는 다음과 같습니다(간단한 버전):

으아아아

걱정해야 할 문제는 : 다른 지역 서버(d2, d3, d4, d5)에서 조건을 충족할 수 있는 d1에서 업데이트 또는 삭제 문을 실행하면 업데이트 및 삭제 문이 d1에서 올바르게 실행된다는 것입니다. , 그러나 d1에서 동일한 명령문이 실행되면 실수로 c 서버의 다른 지역에 있는 레코드를 업데이트/삭제할 수 있습니다.

이 문제를 해결하려면 문을 검증하고 다음 조건 중 하나가 충족되지 않으면 예외를 발생시키는 것이 좋습니다.

  • 조건은 = 또는 IN입니다
  • 필드는 [pk|fk]*ID이며, 이는 외래 키 또는 기본 키입니다

복제 동작이 없는 테이블은 정상적으로 실행됩니다. 위의 제한 사항은 이 예의 tblFoo와 같은 복제 동작이 있는 테이블에만 적용됩니다.

질문

기본 또는 외래 키만 검색할 수 있고 = 또는 IN 연산자만 사용할 수 있도록 재작성 실행에서 업데이트/삭제 쿼리를 어떻게 검증할 수 있나요?

P粉448346289
P粉448346289

모든 응답(1)
P粉333186285

이것이 제가 문제를 해결한 방법입니다.

복사 동작이 있는 모델은 다음 검증을 수행합니다.

으아아아

조건이 올바르게 검증되도록 Query类,我们有一个isReplicate方法,触发我们需要的验证,where 메서드가 재정의되었습니다.

으아아아
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿