>데이터 베이스 >MySQL 튜토리얼 >롤백 후 MySQL의 AUTO_INCREMENT가 재설정되지 않는 이유는 무엇입니까?

롤백 후 MySQL의 AUTO_INCREMENT가 재설정되지 않는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-22 16:31:10137검색

Why Doesn't MySQL's AUTO_INCREMENT Reset After a Rollback?

MySQL AUTO_INCREMENT가 롤백의 영향을 받지 않는 이유

MySQL의 AUTO_INCREMENT 필드는 트랜잭션 상태에 관계없이 고유한 값을 유지합니다. 이 동작은 다음 시나리오에서 비롯됩니다.

시나리오:

  1. 프로그램 1은 테이블 FOO에 레코드를 삽입하여 자동 증가된 기본 값 557을 생성합니다. key.
  2. 프로그램 2는 테이블 FOO에 레코드를 삽입하여 값을 검색합니다. 558.
  3. 프로그램 2는 558 값을 테이블 BAR에 외래 키로 삽입합니다.
  4. 두 개의 커밋을 프로그래밍합니다.
  5. 프로그램 1은 롤을 실행합니다.

문제:

롤백 후 557 값을 회수하면 해결되지 않은 여러 문제가 발생합니다.

  • 기본 키 값 감소 FOO의 경우 더 높은 수준의 다른 기록에 영향을 미칠 수 있습니다.
  • BAR을 수정하려면 외래 키를 제거해야 하며, 이는 다른 데이터에 영향을 미칠 수 있습니다.
  • 프로그램 3에서 인쇄된 보고서를 삭제하는 것은 사실상 불가능합니다.

결과:

이러한 이유로 Oracle의 시퀀스 번호는 Oracle의 시퀀스 번호와도 독립적으로 작동합니다.

해결 방법:

간격 없는 자동 증가 값을 유지하는 것이 중요한 경우 트랜잭션 롤백을 사용할 수 없습니다. 대신 상태 플래그를 레코드에 추가할 수 있습니다.

  • 초기 삽입 시 상태를 "미완료"로 설정하세요.
  • 거래 중에 상태를 "완료"로 업데이트하세요. 작업이 성공했습니다.
  • 트랜잭션을 커밋하여 기록을 라이브로 표시합니다.
  • 트랜잭션이 롤백되면 불완전한 기록은 감사 목적으로 남습니다.

이 솔루션에는 고유한 문제가 있지만 자동 증가 공백을 피하면서 감사 추적을 유지할 수 있는 방법을 제공합니다.

위 내용은 롤백 후 MySQL의 AUTO_INCREMENT가 재설정되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.