2011-01-20 2 views
1

나는 지폐가있는 테이블을 가지고 있습니다. 모든 청구서에는 새 레코드를 삽입 한 후 DB에서 가져온 ID가 있습니다. 이 필드는 AUTO_INCREMENT가 설정된 INTEGER입니다.AUTO_INCREMENT 기본 ID가있는 MySQL 테이블은 롤백 후 숫자를 해제하지 않습니다.

트랜잭션의 일부로 새 레코드를 삽입하고이 트랜잭션을 롤백해야하는 경우 ID가 제거되고 사라집니다. 따라서이 ID가 사용 중이 아닐지라도 다음 레코드는 ID가 하나 더 높게됩니다.

지폐가 선형 번호 매기기를 사용하는 것이 더 좋을 수 있으므로 회계 부서에서 문제가 있는지 파악할 수 있습니다.

답변

5

동시성의 이유로 자동 증가 값은 트랜잭션으로 "롤백"할 수 없습니다. 트랜잭션이 진행되는 동안 다른 프로세스가 레코드를 삽입 한 경우 나중에 ID와 충돌 할 위험이 있습니다.

예를 들어, 프로세스 "A"의 트랜잭션이 ID 1,2 및 3을 획득한다고 가정 해 보겠습니다. 다른 프로세스 "B"가 실행되고 ID 4 및 5가 실행됩니다. ID가 트랜잭션과 롤백되고 다음 프로세스 "C"는 ID가 5 개 필요하고 1,2,3,4,5를 얻지 만 4와 5는 이미 프로세스 "B"에서 가져 왔습니다.

+0

감사합니다. 나는 그것이 그것이라고 생각한다 :-) – Remy

관련 문제