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
Lepaskan: 2025-01-18 20:13:10
asal
117 orang telah melayarinya

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

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

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

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!

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