Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Masalah 'Tidak boleh menambah kekangan kunci asing' Ralat dalam MySQL?

Bagaimana untuk Menyelesaikan Masalah 'Tidak boleh menambah kekangan kunci asing' Ralat dalam MySQL?

Barbara Streisand
Barbara Streisandasal
2025-01-18 20:17:12918semak imbas

How to Troubleshoot

Panduan Penyelesaian Ralat Kekangan Kunci Asing MySQL

Pengenalan

Apabila mewujudkan kekangan kunci asing untuk jadual dalam pangkalan data, ralat mungkin ditemui semasa penciptaan atau pengubahsuaian. Satu ralat sedemikian ialah "ERROR 1215 (HY000): Tidak boleh menambah kekangan kunci asing".

Kes: Isu kekangan utama asing dalam jadual Pesakit dan Janji Temu

Pertanyaan SQL berikut mengalami ralat semasa cuba menambah kekangan kunci asing pada jadual Pesakit dan Janji Temu:

<code class="language-sql">CREATE TABLE IF NOT EXISTS `doctorsoffice`.`Patient` (
...
  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
);
CREATE TABLE IF NOT EXISTS `doctorsoffice`.`Appointment` (
...
  CONSTRAINT `FK_Patient`
    FOREIGN KEY (`Patient`)
    REFERENCES `doctorsoffice`.`Patient` (`PatientID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `FK_Doctor`
    FOREIGN KEY (`Doctor`)
    REFERENCES `doctorsoffice`.`doctor` (`DoctorID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);</code>

Penyelesaian: Sahkan keserasian jenis data

Untuk menyelesaikan isu ini, sahkan bahawa jenis data lajur yang terlibat dalam kekangan kunci asing adalah serasi. Dalam kes ini, pastikan anda:

  • Jenis data lajur MedicalHistory dalam jadual Pesakit betul-betul sepadan dengan lajur MedicalHistoryID dalam jadual medicalhistory, iaitu kedua-duanya hendaklah daripada jenis INT.
  • Jenis data lajur Doktor Utama dalam jadual Pesakit sepadan dengan jenis data lajur DoctorID dalam jadual doktor, kedua-duanya hendaklah daripada jenis SMALLINT.

Selepas membetulkan ketidakpadanan jenis data ini, anda boleh berjaya menambah kekangan kunci asing.

Petua Tambahan: Lumpuhkan pemeriksaan kunci asing

Untuk menambah lebih fleksibiliti semasa membuat jadual dalam susunan tertentu, pertimbangkan untuk menggunakan arahan berikut sebelum melaksanakan pertanyaan SQL:

<code class="language-sql">SET foreign_key_checks=0;</code>

Arahan ini melumpuhkan semakan kunci asing buat sementara waktu, membenarkan jadual dibuat tanpa mengira kebergantungan jadual ibu bapa-anak. Selepas jadual dibuat, semakan kunci asing boleh didayakan semula menggunakan arahan berikut:

<code class="language-sql">SET foreign_key_checks=1;</code>

Dengan mengikuti garis panduan ini, anda boleh memastikan bahawa kekangan kunci asing dilaksanakan dengan betul dalam pangkalan data anda, mencegah ralat dan mengekalkan integriti data.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Masalah 'Tidak boleh menambah kekangan kunci asing' Ralat 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