MySQL의 자동 증가 필드에서 공백을 채울 수 있습니까?

Susan Sarandon
풀어 주다: 2024-11-14 18:01:02
원래의
480명이 탐색했습니다.

Can I Fill Gaps in Auto-Increment Fields in MySQL?

Filling Gaps in Auto-Increment Fields

Question: Is there a way to seamlessly fill gaps in auto-increment fields with new inserts?

Answer:

While it is generally not advisable to rely on auto-increment fields for ordering or semantic meaning, there are situations when filling these gaps may be desirable. In such cases, a MySQL feature can be utilized to create a new set of sequential IDs.

Create a temporary table using CREATE TEMPORARY TABLE NewIDs (NewID INT UNSIGNED AUTO INCREMENT, OldID INT UNSIGNED) and insert all existing IDs in ascending order:

INSERT INTO NewIDs (OldID)
SELECT Id
FROM OldTable
ORDER BY Id ASC
로그인 후 복사

This will create a mapping between old and new IDs.

To update the references in other tables, disable foreign key constraints:

SET foreign_key_checks = 0;
로그인 후 복사

Then, update the Parent and Child tables:

UPDATE
Parent, Child, NewIds
SET
Parent.ParentId = NewIds.Id,
Child.ParentId = NewIds.Id
WHERE
Parent.ParentId = NewIds.ParentId AND
Child.ParentId = NewIds.ParentId
로그인 후 복사

Finally, re-enable foreign key checks:

SET foreign_key_checks = 1;
로그인 후 복사

Drop the temporary table for cleanup:

DROP TABLE NewIds
로그인 후 복사

It's important to note that this process should be used with caution, as modifying auto-increment fields can have implications for referential integrity and performance.

위 내용은 MySQL의 자동 증가 필드에서 공백을 채울 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿