연속 자동 증가 ID 보장
데이터베이스 관리에서 자동 증가 필드는 각 레코드에 대한 고유 식별자를 생성하는 편리한 방법을 제공합니다. 그러나 삽입 및 삭제와 같은 특정 작업으로 인해 이러한 ID 시퀀스에 "구멍"이나 공백이 생길 수 있습니다.
데이터베이스 사용자가 흔히 묻는 질문 중 하나는 이러한 구멍을 채울 수 있는지 여부입니다. 대답은 자동 증가 필드의 목적을 이해하는 데 있습니다.
자동 증가 필드는 주로 레코드 순서 표시기가 아닌 레코드 식별에 사용됩니다. 따라서 일반적으로 연속적인 ID 시퀀스를 가질 필요는 없습니다. 간격은 테이블의 무결성이나 기능에 영향을 미치지 않습니다.
그러나 연속 번호 매기기를 유지하는 것이 중요한 특정 경우에는 다음과 같은 방법을 사용할 수 있습니다.
임시 사용 새 ID를 생성하기 위한 테이블
MySQL 3.23 이상을 사용하는 경우 새로운 순차 ID 세트를 생성하기 위한 임시 테이블입니다. 여기에는 두 개의 열이 있는 임시 테이블을 생성하는 작업이 포함됩니다. 하나는 새 ID(NewID)용이고 다른 하나는 이전 ID(OldID)용입니다.
다음 코드를 사용하여 임시 테이블을 만들고 다음으로 채울 수 있습니다. 기존 ID:
CREATE TEMPORARY TABLE NewIDs ( NewID INT UNSIGNED AUTO INCREMENT, OldID INT UNSIGNED ); INSERT INTO NewIDs (OldID) SELECT Id FROM OldTable ORDER BY Id ASC;
이렇게 하면 각 행이 기존 ID와 새로운 순차 ID가 쌍을 이루는 테이블이 생성됩니다. 다음 단계는 이러한 새 ID로 실제 테이블을 업데이트하는 것입니다.
실제 테이블 및 외래 키 참조 업데이트
테이블을 업데이트하려면 다음을 수행해야 합니다. 자동 증가 필드와 해당 필드를 사용하는 외래 키 참조를 모두 업데이트합니다. 여기에는 외래 키 제약 조건을 일시적으로 비활성화하고 업데이트 후 다시 활성화하는 작업이 포함될 수 있습니다.
예
다음 스키마를 사용하는 두 테이블, 상위 테이블과 하위 테이블을 고려해 보세요.
CREATE TABLE Parent ( ParentId INT UNSIGNED AUTO INCREMENT, Value INT UNSIGNED, PRIMARY KEY (ParentId) ); CREATE TABLE Child ( ChildId INT UNSIGNED AUTO INCREMENT, ParentId INT UNSIGNED, PRIMARY KEY (ChildId), FOREIGN KEY (ParentId) REFERENCES Parent (ParentId) );
임시 테이블의 새 ID로 상위 및 하위 테이블을 업데이트하려면 다음 SQL을 사용할 수 있습니다. 설명:
SET foreign_key_checks = 0; UPDATE Parent, Child, NewIds SET Parent.ParentId = NewIds.Id, Child.ParentId = NewIds.Id WHERE Parent.ParentId = NewIds.ParentId AND Child.ParentId = NewIds.ParentId; SET foreign_key_checks = 1; DROP TABLE NewIds;
참고:
이러한 구멍을 채우는 것은 기능적 이점을 제공하지 않는다는 점을 이해하는 것이 중요합니다. 자동 증가 필드는 순차적 순서를 유지하기 위한 것이 아니라 고유한 레코드 식별을 보장하기 위해 존재합니다.
위 내용은 데이터베이스에서 자동 증가 ID의 공백을 메울 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!