ホームページ  >  記事  >  データベース  >  MySQL の自動インクリメント フィールドのギャップを埋めることはできますか?

MySQL の自動インクリメント フィールドのギャップを埋めることはできますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-14 18:01:02482ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。