MySQL AUTO_INCREMENT: 롤백 수수께끼 풀기
MySQL에서 InnoDB 트랜잭션과 함께 AUTO_INCREMENT 필드를 활용하면 특이한 동작이 나타납니다. 롤백은 영향을 미치지 않습니다. AUTO_INCREMENT 값. 이 디자인 선택의 이유를 이해하는 것이 중요합니다.
다음 시나리오를 고려하십시오.
시나리오:
- Program One은 트랜잭션을 시작하고 AUTO_INCREMENT 값을 할당하여 테이블 FOO에 레코드를 삽입합니다. 557.
- 또한 프로그램 2는 트랜잭션을 시작하고 FOO에 레코드를 삽입하여 558을 얻습니다.
- 프로그램 2는 FOO의 558 값을 참조하여 테이블 BAR에 레코드를 삽입합니다.
- 프로그램 2는 트랜잭션을 커밋합니다.
- 프로그램 3은 테이블 FOO를 기반으로 보고서를 생성합니다. 값이 558인 레코드를 포함합니다.
- Program One은 마침내 트랜잭션을 롤백합니다.
롤백 및 AUTO_INCREMENT:
데이터베이스 시스템은 일반적으로 잠재적인 이유로 AUTO_INCREMENT 값을 롤백하지 않음 의미:
-
데이터 무결성: 롤백 시 557 값이 감소하는 경우 557보다 큰 키를 가진 다른 레코드의 값은 유효하지 않게 됩니다.
-
외래 키 제약 조건: BAR 테이블의 558에 대한 참조는 다음과 같습니다. FOO의 558 레코드가 제거되면 고아가 됩니다.
-
보고서 불일치: 프로그램 3에서 생성된 보고서는 값이 557인 롤백된 레코드를 제외하도록 수정해야 합니다.
해결 방법 및 대안:
AUTO_INCREMENT 필드는 롤백할 수 없지만 특정 요구 사항을 해결하는 대체 솔루션이 있습니다.
-
불완전한 기록: 감사 목적 , 레코드에 대한 상태 플래그 유지를 고려하십시오. 생성 시 "불완전"으로 표시된 레코드는 AUTO_INCREMENT 값에 영향을 주지 않고 롤백하여 감사 추적을 제공할 수 있습니다.
이러한 해결 방법을 구현하려면 데이터 무결성, 성능 및 특정 비즈니스 요구 사항을 신중하게 고려해야 합니다.
위 내용은 InnoDB 트랜잭션에서 MySQL AUTO_INCREMENT 값이 롤백되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!