Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Memotong Jadual dengan Kekangan Utama Asing dalam MySQL?

Bagaimana untuk Memotong Jadual dengan Kekangan Utama Asing dalam MySQL?

Susan Sarandon
Susan Sarandonasal
2024-11-18 07:10:02431semak imbas

How to Truncate Tables with Foreign Key Constraints in MySQL?

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!

Kenyataan:
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