Rumah >pangkalan data >tutorial mysql >Mengapa Saya Mendapat Ralat MySQL 150: Kegagalan Kekangan Utama Asing?

Mengapa Saya Mendapat Ralat MySQL 150: Kegagalan Kekangan Utama Asing?

DDD
DDDasal
2024-11-19 09:55:03652semak imbas

Why Am I Getting MySQL Error 150: Foreign Key Constraint Failure?

MySQL Errno 150: Kegagalan Kekangan Kunci Asing

Apabila cuba mencipta kekangan kunci asing, pengguna mungkin menghadapi Erorno 150. Kunci asing kekangan memastikan integriti data dengan merujuk medan dalam jadual lain, memaksa medan yang dirujuk untuk wujud dalam jadual sumber.

Punca Potensi: Percanggahan Jenis Data

Satu punca biasa Errorno 150 ialah percanggahan dalam jenis data antara lajur yang dirujuk dalam jadual anak (Bahagian) dan lajur kunci utama dalam jadual yang dirujuk (Pengajar).

Contoh:

create TABLE Instructors (
  ...
  ID int(10),
  ...
);
create table Sections (
  ...
  Instructor_ID varchar(10),
  ...
  FOREIGN KEY (Instructor_ID) REFERENCES Instructors(ID)
  ...
);

Dalam contoh ini, lajur ID dalam jadual Pengajar ditakrifkan sebagai integer, manakala Instructor_ID lajur dalam jadual Bahagian ditakrifkan sebagai rentetan. Perbezaan dalam jenis data ini menghalang kekangan kunci asing daripada diwujudkan.

Penyelesaian:

Untuk menyelesaikan isu ini, pastikan jenis data lajur yang dirujuk dalam kedua-dua meja sepadan. Dalam contoh di atas, tukar Instructor_ID menjadi jenis data integer:

create table Sections (
  ...
  Instructor_ID int(10),
  ...
);

Punca Potensi Lain:

  • Kunci Utama Tidak Ditakrifkan: Jadual yang dirujuk (Pengajar) mungkin tidak mempunyai kunci utama ditakrifkan.
  • Pelanggaran Integriti Data: Baris sedia ada dalam jadual anak (Bahagian) mungkin mengandungi nilai kunci asing yang tidak wujud dalam jadual yang dirujuk (Pengajar).
  • Sintaks Salah: Pastikan sintaks untuk kekangan FOREIGN KEY adalah betul, termasuk klausa ON DELETE dan ON UPDATE.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat MySQL 150: Kegagalan Kekangan Utama Asing?. 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