2014-01-19 2 views
0

다른 데이터를 저장하는 SQL 테이블이 있습니다. 그리고 기본 키는 하나의 새로운 데이터가 입력되는 정수 값을가집니다. 우리가 계속 추가하는 한 제대로 작동합니다. 그러나 중심 값이나 종료 값을 삭제하면 문제가 발생합니다.데이터베이스 열 값에서 자동 증가 및 자동 변경 방법

예를 들어, 테이블에 5 개의 행을 추가했습니다. 그리고 열 sr_num의 값은 5입니다. 그리고 네 번째 레코드를 삭제하면 sr_num 열이 1,2,3,5와 같이 남아 있습니다.

4 번째 항목을 삭제하자마자 1,2,3,4가되고 싶습니다. 5 번째 사람도 4 번째 자리와 같은 번호를 원합니다.

모두에게해야합니다.

+5

** 당신은 ** 그렇게 확신합니까? 즉 ** 수동으로 ** 해당 테이블을 업데이트해야합니다. 수동으로 모든 테이블을 해당 테이블과의 관계로 업데이트하십시오 (계단식으로). 또한 색인이 무효화됩니다. ** 그 이유를 물어봐도 될까요 **? 프로 그래 시브 인덱스가'SELECT'에서'ROW_NUMBER()'를 사용하기를 원한다면 ... –

+1

행을 삭제하고 동일한 키를 가진 다른 키를 그 자리에 놓으면, 그것은 또한 문제를 일으킬 것입니다. 이제 동일한 키에 대해 두 개의 논리 행이 있습니다. 키는 다른 사람 (사용자)이 관찰 한 후에 다시 사용하면 안됩니다. – usr

+0

다음을 참조하십시오 : http://stackoverflow.com/questions/2214141/mysql-auto-increment-after-delete?rq=1 – dursk

답변

1

아니요. 기본 키를 사용하지 않습니다. 고유성을 허용하기 위해 논리적 참조에만 사용됩니다. 정수를 사용한다는 사실을 정신적으로 무시해야합니다. @Adriano와 @marc_s가 모두 정확합니다. 기본 키 값의 번호를 다시 매길 수/다시해야한다는 생각을 버리십시오. 당신이 그것을 고려할 때 드문 경우가 있지만, 드문 경우는 아닙니다.

대신, @ Adriano에서 언급 한 것처럼 쿼리에서 ROW_NUMBER()를 사용하는 쿼리 (또는보기)를 설정할 수 있습니다. 그런 다음 기본 키 값을 어지럽히 지 않고 연속 번호를 갖게됩니다. 사람들은 대개 이것을 서수 기둥이나 단순히 Ord라고 부릅니다.

0

당신이 원하는 것은 나쁜 생각입니다.

예 : 당신은 너무 sr_num 같은 값을 다른 테이블을 업데이트하는 데 필요한 sr_num를 업데이트 번 sr_num는, 다른 테이블에 대한 외부 키를 가지고있다.