2012-12-31 3 views
1

내 웹 사이트에서 자동 증가 사용자 ID를 사용할 계획입니다. 사용자 데이터가 여러 테이블로 나뉘어지면서 나는 트랜잭션에서 자동 증분 값이 얼마나 신뢰할 수 있는지 궁금하다. 즉, 등록시 트랜잭션의 초기 값을 테이블에 삽입 할 때 자동 증분자가 ID를 모든 테이블에 저장하거나 하나의 테이블에 삽입하고 삽입 된 ID를 별도의 쿼리에 가져와 후속 삽입에 사용하면 사용자 생성을 위해 더 높은 데이터베이스로드가 발생합니다.트랜잭션에서 AUTO_INCREMENT의 신뢰성은 얼마나됩니까?

+0

"신뢰할 수있는"을 정의하십시오. 중복 된 기본 키를 삽입하는 것은 물리적으로 불가능하지만 다중 문 대신 매우 신중한 테이블 잠금이 필요합니다. –

+0

자동 증가 ID의 가장 큰 문제점은 여러 환경이 있고 동일한 값의 행에 대해 ID를 동기화해야하는 경우입니다. 조회 테이블처럼. 그렇지 않으면 일반적으로 잘 작동합니다. – xQbert

답변

1

자동 증가 필드는 사용자가 무언가를 삽입하려고 할 때마다 예약됩니다.

1 : 2 단계에서 삽입 어느 정도 진행 키 다음으로 사용 가능한 자동 증가
2 예약 : 트랜잭션이 롤백 경우, 지금이 예약 된 키

로 삽입을 수행을 유일한 롤백 할 수없는 자동 증가 예약은 자동 증가 열의 갭을 초래합니다. 이 때문에 자동 증가가 100 %가 될 것이라고 예측하려고한다면 그렇게 할 수 없습니다. 내가 아는 auto_increment에는 다른 문제가 없으며, 거의 모든 경우에 수동으로 작업을 수행하는 것보다 mysql의 기능에 의존하는 것이 더 신뢰할 수 있습니다.

0

동시 트랜잭션이없는 것처럼 매우 제한적인 조건으로 삽입이 수행되고 롤백 된 내용이없는 경우 안전 할 수 있습니다. 그렇지 않은 경우, 사용중인 스토리지 엔진에 따라 응답이 달라질 수 있습니다. auto_increment을 입력하면 번호 매기기의 간격이 least if you are using InnoDB이됩니다.

더 일반적으로 내가 아는 모든 DB는 auto_increment (또는 이와 동등한) 값의 차이가 발생할 수 있습니다. 그 이유는 그렇지 않은 경우 새 행을 삽입하는 트랜잭션은 해당 테이블에 대한 다른 모든 삽입을 차단해야하기 때문입니다. 이는 첫 번째 트랜잭션이 아직 커밋되거나 롤백되지 않은 경우 다음 값이 무엇인지 알 수 없을 때 두 번째 행을 삽입 할 수 없기 때문입니다. 갭을 허용하면 첫 번째 트랜잭션이 커밋 될 것이라고 가정하고, 롤백이 발생하면 갭이 있지만 문제는 아닙니다.

사용자 생성 작업에 대한 걱정거리가 많은 경우이 기능을 저장 프로 시저로 구현하여보다 능숙하게 만들 수 있습니다. 이 방법을 사용하면 각 쿼리에 대해 응용 프로그램으로 라운드 트립 할 필요가 없습니다.

+0

간격은 결코 문제가되지 않습니다. –

+0

@ ÁlvaroG.Vicario : 어떤 숫자가 생성되었는지 예측하려고하는 경우 그 질문이 무엇인지 예상 할 수 있습니다. –

관련 문제