업데이트 시 MySQL이 읽히지 않도록 방지
P粉190883225
P粉190883225 2023-11-07 18:05:53
0
1
536

두 가지 간단한 쿼리가 있습니다. 하나는 테이블을 읽는 것이고 다른 하나는 테이블을 업데이트하는 것입니다. 업데이트 쿼리가 실행되는 동안 선택 쿼리 읽기를 잠그는 방법. 이제 MySQL InnoDB에서는 쓰기/업데이트가 기본적으로 잠겨 있지만 읽기/선택은 트랜잭션 전에 오래된 데이터를 가져오는 것으로 나타났습니다.

업데이트 쿼리 내부에서 트랜잭션을 사용해 본 다음 SELECT ... FOR UPDATE - 트랜잭션 외부에서 -을 사용해 보았으나 실패한 것 같습니다. 또한 테스트 목적으로 UPDATE 쿼리 속도를 늦추는 방법을 알고 싶습니다. SLEEP(X)를 발견했지만 업데이트 쿼리에서 이를 구현하는 방법을 모르겠습니다.

쓰기가 완료될 때까지 각 쿼리가 읽기/쓰기를 기다리게 하는 방법입니다.

P粉190883225
P粉190883225

모든 응답(1)
P粉877114798

READ-COMMITTED事务将查看最新提交的事务。更改,并使用SELECT ... LOCK IN SHARE MODE를 사용하면 미해결 업데이트가 커밋될 때까지 읽기가 차단됩니다.

이것을 시도해 보세요. 한 화면에서 거래와 업데이트를 시작하세요. SLEEP()이 필요하지 않으며 트랜잭션이 커밋되지 않습니다. UPDATE로 생성된 잠금은 커밋할 때까지 계속 존재합니다.

으아아아

아직 제출하지 마세요.

그동안 두 번째 화면에서는 트랜잭션 격리를 읽기-커밋 트랜잭션으로 설정합니다. InnoDB 쿼리는 자동 커밋되더라도 트랜잭션을 사용하므로 명시적인 트랜잭션을 시작할 필요가 없습니다.

으아아아

공유 모드의 잠금은 업데이트로 생성된 뛰어난 단독 잠금이 아직 남아 있기 때문에 기다리게 합니다.

첫 번째 화면에서:

으아아아

두 번째 화면에서는 짜잔! 차단 읽기는 차단을 해제하고 트랜잭션을 플러시하지 않고도 UDPATE 결과를 즉시 볼 수 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!