Rumah >pangkalan data >tutorial mysql >Mengapa Saya Mendapat Ralat 'Tidak boleh menambah kekangan kunci asing' dalam MySQL, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Saya Mendapat Ralat 'Tidak boleh menambah kekangan kunci asing' dalam MySQL, dan Bagaimana Saya Boleh Membetulkannya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-18 20:13:10233semak imbas

Why Am I Getting a

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!

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