[SQL] 왜 IDENTITY 열 값이 차이는 무엇입니까?
SQL왜 IDENTITY 열 값이 차이는 무엇입니까?
나는 문제가있다.
(: INT 타입) 내 ID 차 (IDENTITY)를 자동 증가하도록 구성 할 수 있습니다. 나는 새로운 행을 삽입 할 때,이 새로운 ID가 연속되지 않습니다. 해프닝은 무엇인가? 모든 솔루션을?
편집 :
[...]
[id]int] IDENTITY(1,1) NOT NULL,
[...]
CONTRAINT [PK_Medida] PRIMARY KEY CLUSTERED
(
[id] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
해결법
-
==============================
1.신원이 연속 될 것으로 기대하지 마십시오. 간격을 남길 수 많은 시나리오가 있습니다. 추상적 번호와 같은 신원을 고려하고 모든 사업의 의미를 첨부하지 않습니다.
신원이 연속 될 것으로 기대하지 마십시오. 간격을 남길 수 많은 시나리오가 있습니다. 추상적 번호와 같은 신원을 고려하고 모든 사업의 의미를 첨부하지 않습니다.
-
==============================
2.열에 IDENTITY 속성은 다음을 보장하지 않습니다 :
열에 IDENTITY 속성은 다음을 보장하지 않습니다 :
값의 고유성은 - 고유성은 PRIMARY KEY 또는 UNIQUE 제약 조건 또는 UNIQUE 인덱스를 사용하여 시행해야합니다.
트랜잭션 (transaction) 연속 값은 - 여러 행을 삽입하는 트랜잭션은 다른 동시 삽입이 테이블에 발생할 수 있기 때문에 행에 대한 연속적인 값을 얻을 수 보장 할 수 없습니다. 값은 연속되어야합니다 경우 트랜잭션은 테이블에 배타적 잠금을 사용하거나 SERIALIZABLE 격리 수준을 사용해야합니다.
서버를 다시 시작 또는 다른 실패 -SQL 서버 힘 캐시 ID 값 성능상의 이유로 및 할당 된 값의 일부 이후 연속 값은 데이터베이스 오류 또는 서버 다시 시작하는 동안 손실 될 수 있습니다. 이것은 삽입시 ID 값의 차이가 발생할 수 있습니다. 간격이 허용되지 않습니다 경우 응용 프로그램은 NOCACHE 옵션을 사용하여 시퀀스 생성기를 사용하거나 키 값을 생성하기 위해 자신의 메커니즘을 사용해야합니다.
값의 재사용은 - 특정 씨앗 / 증분 주어진 ID 속성의 경우, ID 값은 엔진에 의해 재사용되지 않습니다. 특정 삽입 문이 실패하거나 삽입 문이 다시 롤백되는 경우 소비 ID 값은 손실되고 다시 생성되지 않습니다. 후속 식별 값이 생성 될 때 갭이 발생할 수있다.
또한,
ID 열 빈번한 삭제 가진 테이블이있는 경우, 갭은 식별 값 사이에서 발생할 수있다. 이 염려 될 경우, IDENTITY 속성을 사용하지 않습니다. 그러나, 격차가 생성되지 않았는지 확인하거나, 기존의 ID 값이 이전에 명시 적으로 SET IDENTITY_INSERT ON으로 하나를 입력 평가하는 기존의 공백을 채울 수 있습니다.
또한, IDENTITY 열 속성을 확인 및 아이디 증가 값을 확인합니다. 그것의 1이어야한다.
-
==============================
3.간격 때 발생합니다
간격 때 발생합니다
-
==============================
4.당신은 증가 문을 실행하기 전에, 또는 그 문이 실행되지 및 오류가있는 경우 롤백 않습니다 있도록 트랜잭션을 사용하여 예상되는 오류를 평가하여 중이 오류를 방지 할 수 있습니다. 희망이 도움이
당신은 증가 문을 실행하기 전에, 또는 그 문이 실행되지 및 오류가있는 경우 롤백 않습니다 있도록 트랜잭션을 사용하여 예상되는 오류를 평가하여 중이 오류를 방지 할 수 있습니다. 희망이 도움이
-
==============================
5.삭제 된 행의 자동 ID는 새로운 삽입 된 행에 의해 더 이상 사용되지 않습니다. 나는 당신이 전나무 솔루션을 제공 할 수 아니지만, 이것은 동작입니다.
삭제 된 행의 자동 ID는 새로운 삽입 된 행에 의해 더 이상 사용되지 않습니다. 나는 당신이 전나무 솔루션을 제공 할 수 아니지만, 이것은 동작입니다.
WOUTER
-
==============================
6.기본 및 경우 자동 증가가 참으로 열이 설정되어있는 경우가 사이에 일부 행을 삭제 한 수 있기 때문에 다음이 발생합니다. 당신이 연속되고 싶은 경우에 당신은 자동 증가를 사용하지 않아야합니다.
기본 및 경우 자동 증가가 참으로 열이 설정되어있는 경우가 사이에 일부 행을 삭제 한 수 있기 때문에 다음이 발생합니다. 당신이 연속되고 싶은 경우에 당신은 자동 증가를 사용하지 않아야합니다.
-
==============================
7.나는 삽입 문의 거대한 숫자가 실패 할 것으로 예상하는 몇 가지 제약 조건이있는 테이블이있다. 그것은 신원 (1,1)에 의해 처리됩니다 내 인덱스에서 큰 격차가 발생했다.
나는 삽입 문의 거대한 숫자가 실패 할 것으로 예상하는 몇 가지 제약 조건이있는 테이블이있다. 그것은 신원 (1,1)에 의해 처리됩니다 내 인덱스에서 큰 격차가 발생했다.
내가 고안 한이 솔루션은 ID 열없이 준비 테이블을 작성했지만, 테이블의 다른 열을 모두 가지고있다. 그때 삽입이 성공 후, 레코드가 인덱스 실제 테이블에 전달되는 것을 준비 테이블 테이블에서 실행하는 트리거를 지정합니다. 이 경우, ID 예약은 다른 시간에 수행하고 모든 값이 ID를 위해 함께 그룹화 할 수있다.
나는이 조금 비효율적 인 것 같다 알고 있어요,하지만 지금까지 나를 위해 매우 잘 작동합니다.
from https://stackoverflow.com/questions/14642013/why-are-there-gaps-in-my-identity-column-values by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클 SQL - 열의 최대 5 개 값을 검색하는 방법 (0) | 2020.03.29 |
---|---|
[SQL] SQL은 : 그룹 당 최대 기록을 찾기 [중복] (0) | 2020.03.29 |
[SQL] 저장 프로 시저 파라미터리스트의 발현 (예를 들면 함수 호출)의 결과를 이용? (0) | 2020.03.29 |
[SQL] 어떻게 필드의 고유 항목 Access 쿼리에서 계산합니까? (0) | 2020.03.29 |
[SQL] 왼쪽 외부가 작동하지 않는다 가입? (0) | 2020.03.29 |