Rumah  >  Artikel  >  pangkalan data  >  Mengapa Saya Tidak Boleh Menambah Kekangan Utama Asing dalam MySQL?

Mengapa Saya Tidak Boleh Menambah Kekangan Utama Asing dalam MySQL?

DDD
DDDasal
2024-10-27 00:29:30173semak imbas

 Why Can't I Add a Foreign Key Constraint in MySQL?

Ralat Kekangan Kunci Asing MySQL: Menyelidiki Puncanya

Apabila cuba mencipta jadual dengan kekangan kunci asing dalam MySQL, anda boleh menghadapi ralat samar: "Tidak boleh menambah kekangan kunci asing." Ralat ini boleh membingungkan, terutamanya jika anda telah memastikan kewujudan kunci utama dalam jadual yang dirujuk.

Untuk membongkar punca ralat ini, laksanakan arahan berikut:

SHOW ENGINE INNODB STATUS;

Perintah ini memaparkan maklumat terperinci tentang enjin InnoDB, termasuk kekangan kunci asing dan ralatnya.

Salah satu sebab yang paling biasa untuk ralat ini ialah ketidakpadanan antara medan yang dirujuk dan medan kunci asing. Mereka mesti sepadan dalam aspek berikut:

  • Enjin: Kedua-dua medan mesti menggunakan enjin yang sama, seperti InnoDB.
  • Jenis data: Jenis data dan panjang mestilah sama. Sebagai contoh, kedua-dua medan mestilah VARCHAR(20) atau INT(10) TIDAK BERTANDA.
  • Pengumpulan: Pengumpulan, seperti utf8, mestilah sama.
  • Unik: Kunci asing harus merujuk kepada medan yang unik (biasanya kunci utama) dalam jadual rujukan.

Satu lagi punca yang berpotensi ialah mentakrifkan keadaan SET NULL untuk a kunci asing, walaupun beberapa lajur dalam jadual rujukan BUKAN NULL. Untuk mengelakkan ralat ini, pastikan semua lajur yang terlibat dalam kekangan kunci asing BUKAN NULL.

Ingat, sementara mungkin untuk melumpuhkan semakan kunci asing buat sementara waktu dengan "set foreign_key_checks=0", ini harus dilakukan hanya untuk tujuan penyahpepijatan tertentu. Sentiasa pastikan bahawa kekangan kunci asing didayakan untuk mengekalkan integriti data dalam pangkalan data anda.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menambah Kekangan Utama Asing 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