Memotong Jadual dengan Kekangan Utama Asing
Memotong jadual dengan kekangan kunci asing boleh menjadi mencabar. Bayangkan cuba memotong jadual mygroup, hanya untuk menghadapi ralat:
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (mytest.instance, CONSTRAINT instance_ibfk_1 FOREIGN KEY (GroupID) REFERENCES mytest.mygroup (ID))
Skema Pangkalan Data:
CREATE TABLE mygroup ( ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ) ENGINE=InnoDB; CREATE TABLE instance ( ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, GroupID INT NOT NULL, DateTime DATETIME DEFAULT NULL, FOREIGN KEY (GroupID) REFERENCES mygroup(ID) ON DELETE CASCADE, UNIQUE(GroupID) ) ENGINE=InnoDB;
Melumpuhkan Pemeriksaan Kunci Asing:
Kaedah konvensional untuk memotong jadual dengan kekangan kunci asing adalah untuk melumpuhkannya buat sementara waktu:
SET FOREIGN_KEY_CHECKS = 0; TRUNCATE mygroup; TRUNCATE instance; SET FOREIGN_KEY_CHECKS = 1;
Awas: Melumpuhkan semakan kunci asing membenarkan data yang melanggar kekangan yang perlu dimasukkan ke dalam jadual. Ini mungkin membawa kepada isu integriti data.
Pertimbangkan Alternatif:
Jika boleh, pertimbangkan untuk menggunakan kenyataan DELETE dan bukannya TRUNCATE:
DELETE FROM mygroup; DELETE FROM instance;
DELETE mengalih keluar semua rekod daripada jadual sambil menghormati kekangan kunci asing. Walau bagaimanapun, ia mengambil masa yang lebih lama untuk dilaksanakan daripada TRUNCATE.
Atas ialah kandungan terperinci Bagaimana untuk Memotong Jadual dengan Kekangan Utama Asing dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!