Rumah > pangkalan data > tutorial mysql > Bolehkah anda mengisi jurang dalam ID kenaikan automatik dalam pangkalan data anda?

Bolehkah anda mengisi jurang dalam ID kenaikan automatik dalam pangkalan data anda?

DDD
Lepaskan: 2024-11-12 05:51:02
asal
704 orang telah melayarinya

Can you fill the gaps in auto-increment IDs in your database?

Memastikan ID AutoTambahan Berturut-turut

Dalam pengurusan pangkalan data, medan kenaikan automatik menyediakan cara yang mudah untuk menjana pengecam unik bagi setiap rekod. Walau bagaimanapun, operasi tertentu seperti sisipan dan pemadaman boleh mencipta "lubang" atau jurang dalam jujukan ID ini.

Satu soalan lazim dalam kalangan pengguna pangkalan data ialah sama ada boleh mengisi lubang ini. Jawapannya terletak pada memahami tujuan medan kenaikan automatik.

Medan kenaikan automatik digunakan terutamanya untuk pengenalan rekod, bukan sebagai penunjuk susunan rekod. Oleh itu, pada umumnya tidak perlu mempunyai urutan ID yang berturutan. Jurang tidak menjejaskan integriti atau kefungsian jadual.

Walau bagaimanapun, untuk kes tertentu yang mengekalkan penomboran berturut-turut adalah penting, terdapat kaedah yang boleh digunakan:

Menggunakan Sementara Jadual untuk Mencipta ID Baharu

Jika anda menggunakan MySQL 3.23 atau lebih baru, anda boleh menggunakan jadual sementara untuk mencipta set ID berjujukan baharu. Ini melibatkan mencipta jadual sementara dengan dua lajur: satu untuk ID baharu (ID Baru) dan satu lagi untuk ID lama (ID Lama).

Kod berikut boleh digunakan untuk mencipta jadual sementara dan mengisinya dengan ID sedia ada:

CREATE TEMPORARY TABLE NewIDs (
    NewID INT UNSIGNED AUTO INCREMENT,
    OldID INT UNSIGNED
);

INSERT INTO NewIDs (OldID)
SELECT
    Id
FROM
    OldTable
ORDER BY
    Id ASC;
Salin selepas log masuk

Ini mencipta jadual di mana setiap baris menggandingkan ID sedia ada dengan ID berjujukan baharu. Langkah seterusnya ialah mengemas kini jadual sebenar dengan ID baharu ini.

Mengemas kini Jadual Sebenar dan Rujukan Utama Asing

Untuk mengemas kini jadual, anda perlu kemas kini kedua-dua medan autokenaikan dan sebarang rujukan kunci asing yang menggunakan medan itu. Ini mungkin melibatkan melumpuhkan kekangan kunci asing buat sementara waktu dan mendayakannya semula selepas kemas kini.

Contoh

Pertimbangkan dua jadual, Ibu Bapa dan Anak, dengan skema berikut:

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)
);
Salin selepas log masuk

Untuk mengemas kini jadual Ibu Bapa dan Anak dengan ID baharu daripada jadual sementara, anda boleh menggunakan pernyataan SQL berikut:

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;
Salin selepas log masuk

Nota:

Adalah penting untuk memahami bahawa mengisi lubang ini tidak memberikan apa-apa faedah berfungsi. Medan autokenaikan wujud untuk memastikan pengenalan rekod unik, bukan untuk mengekalkan susunan berurutan.

Atas ialah kandungan terperinci Bolehkah anda mengisi jurang dalam ID kenaikan automatik dalam pangkalan data anda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan