Ralat Kekangan Utama Asing MySQL: Penyelesaian Masalah dan Penyelesaian
Menghadapi "ERROR 1215 (HY000): Tidak boleh menambah kekangan kunci asing" dalam MySQL apabila bekerja dengan kunci asing adalah isu biasa. Ralat ini biasanya berlaku semasa pembuatan jadual atau pengubahsuaian apabila mentakrifkan perhubungan kunci asing. Masalahnya selalunya terletak pada ketidakkonsistenan antara jadual yang berkaitan.
Mesej ralat itu sendiri tidak selalu menunjukkan masalah yang tepat. Untuk mendiagnosis sebab khusus, gunakan arahan ini:
<code class="language-sql">SHOW ENGINE INNODB STATUS;</code>
Periksa bahagian LATEST FOREIGN KEY ERROR
untuk mendapatkan maklumat terperinci tentang kekangan yang gagal.
Punca Punca dan Penyelesaiannya
Punca yang paling kerap ialah ketidakpadanan dalam jenis data antara lajur kunci asing (dalam jadual anak) dan lajur kunci utama yang dirujuk (dalam jadual induk). Contohnya, jika lajur jadual anak ialah SMALLINT
dan kunci utama jadual induk ialah INT
, kekangan akan gagal. Jenis data mesti sepadan dengan tepat.
Amalan terbaik ialah melumpuhkan semakan kunci asing buat sementara waktu semasa membuat jadual, terutamanya apabila berurusan dengan perhubungan yang rumit. Ini mengelakkan pesanan kebergantungan. Begini caranya:
<code class="language-sql">SET FOREIGN_KEY_CHECKS = 0; -- Your table creation statements here SET FOREIGN_KEY_CHECKS = 1;</code>
Contoh: Membetulkan Percanggahan Jenis Data
Katakan jadual Patient
dan Appointment
menyebabkan ralat. Katakan Patient.MedicalHistory
ialah SMALLINT
dan medicalhistory.MedicalHistoryID
ialah INT
. Penyelesaiannya adalah untuk memastikan ketekalan jenis:
<code class="language-sql">CREATE TABLE IF NOT EXISTS `Patient` ( `PatientID` INT UNSIGNED NOT NULL AUTO_INCREMENT, `FName` VARCHAR(30) NULL, `LName` VARCHAR(45) NULL, `Gender` CHAR NULL, `DOB` DATE NULL, `SSN` DOUBLE NULL, `MedicalHistory` INT UNSIGNED NOT NULL, -- Data type changed to match `PrimaryPhysician` SMALLINT(5) UNSIGNED NOT NULL, PRIMARY KEY (`PatientID`), UNIQUE INDEX `PatientID_UNIQUE` (`PatientID` ASC), CONSTRAINT `FK_MedicalHistory` FOREIGN KEY (`MedicalHistory`) REFERENCES `doctorsoffice`.`medicalhistory` (`MedicalHistoryID`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `FK_PrimaryPhysician` FOREIGN KEY (`PrimaryPhysician`) REFERENCES `doctorsoffice`.`doctor` (`DoctorID`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB;</code>
Dengan memadankan jenis data dengan teliti dan menggunakan teknik pelumpuhan/dayakan semakan kunci asing yang disyorkan, anda boleh menyelesaikan ralat kekangan kunci asing dengan berkesan dan mewujudkan hubungan yang teguh dalam pangkalan data MySQL anda.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Tidak boleh menambah kekangan kunci asing' dalam MySQL, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!