2014-12-25 4 views
1

는 현재 내가 차 + autoincreamental 값으로 ID로 데이터베이스가 내가 증분 값이 현재 마지막 ID에 큰 차이를 발견PHP와 MySQL 이노 (자동 증분 값 문제)

고유 한 값으로 REFCODE라는 다른 필드 테이블에 16553 행만있는 동안 762480입니다

이 동작을 제거하는 방법이 있습니까? 난 당신이 걱정해야 이전 값 내가 걱정해야

또는 전혀

+0

'걱정 마세요. 행복해 .' 같은 행동이 나타난 다음에 테이블을 수정하십시오. 예를 들어, ID가 1,2,3,4 인 레코드가 4 개 있습니다. 두 번째 레코드를 삭제하면 (1,3,4) 있습니다. 다음에 새 레코드와 : (1,3,4, ** 5 **)를 추가하십시오. – Ivan

+0

쿼리 또는 업데이트가 삭제되지 않습니다. 선택 또는 삽입 만 사용되며 삽입되지 않은 경우에도 고유 한 키 또는 다른 행과 일치하는 레코드를 삽입 할 때 추측됩니다. 너무? – SirNarsh

답변

0

이 문제는 레코드 삭제로 인해 발생할 수 있습니다. 데이터베이스 일관성이 올바르게 설정되어 있으면 모두 정상입니다.

하지만 때로는 실패한 데이터베이스 트랜잭션으로 인해 발생할 수 있습니다. gap이 너무 커서 큰 경우 코드에서 사용한 db 트랜잭션을 확인하는 것이 좋습니다.

+0

실패한 쿼리는 현재 레코드와 일치하는 cron 삽입입니다. – SirNarsh

+1

자동 증가 필드를 포함하지 않는 모든 실패한 쿼리에 대해 알고 있으면 문제가 없습니다. 자동 증가 필드는 이렇게 작동합니다. –

0

를 삽입 유지하는 크론 스크립트를 원하지 않는다. auto_increment 키는 순차적이지만 테이블의 전체 히스토리를 기준으로합니다. 따라서 많은 레코드를 삭제할 경우 이전 키를 다시 채우지 않거나 전체 테이블을 다시 색인화하여 간격이 없도록하십시오.

+0

삭제 쿼리 또는 업데이트가 없습니다 선택 또는 삽입 사용되며 고유 한 키 또는 다른 행을 자동 증분 증가 일치하지 삽입 된 경우에도 삽입 할 때 추측이 동작을 참조하십시오 ... 그 정상입니다 너무? – SirNarsh

0

이것이 바로 AUTO_INCREMENT 열이 작동하도록 설계된 방법입니다. AUTO_INCREMENT의 기본 목표는 항상 고유해야하며 연속적이지 않아야합니다.

연속적인 경우 중복 가능성을 피하기 위해 모든 트랜잭션을 순차적으로 (순차적으로) 실행해야하며 확장 성은 문제가됩니다.

그래서 걱정할 필요가 없습니다.