Bagaimana untuk Memotong Jadual dengan Kekangan Utama Asing dalam MySQL?

Susan Sarandon
Lepaskan: 2024-11-18 07:10:02
asal
431 orang telah melayarinya

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

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

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

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan