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;
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) );
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;
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!