Bagaimana Cara Memperbaiki Kesalahan MySQL Cannot Add Foreign Key Constraint?
Diterbitkan: 2022-12-22Bagaimana Anda memperbaiki kesalahan " MySQL Cannot Add Foreign Key Constraint "? Anda mungkin menerima pesan kesalahan berikut saat mencoba menambahkan batasan kunci asing ke tabel MySQL: " ERROR 1215 (HY000): Tidak dapat menambahkan batasan kunci asing ".
Kesalahan seperti ini sangat umum dan tidak memberikan detail spesifik mengenai alasan spesifik mengapa MySQL tidak dapat memasukkan batasan kunci asing ke dalam tabel. Untuk mengatasi masalah ini, Anda perlu mengidentifikasi penyebab pasti masalah tersebut.
Artikel ini akan menjelaskan penyebab error “#1215 – Cannot Add Foreign Key Constraint” MySQL, cara menemukan alasannya, dan cara memperbaikinya dengan empat metode efektif.
Apa Alasan MySQL “#1215 – Cannot Add Foreign Key Constraint” Error?
Kesalahan ini dapat memiliki berbagai penyebab. Untuk menentukan penyebab kesalahan ini, yang terbaik adalah memeriksa bagian KESALAHAN KUNCI ASING TERBARU dari SHOW ENGINE INNODB STATUS.
Dengan cara ini, Anda akan mendapatkan pemahaman yang lebih baik tentang masalah tersebut. Anda akan dapat mengidentifikasi kasus Anda dari daftar berikut:
Biasanya, saat memuat dump, tabel atau indeks yang dirujuk oleh kendala tidak ada
Kadang-kadang, tabel database pelanggan ingin menambahkan kendala tidak ada, menghasilkan pesan kesalahan 1215.
Namun, tidak ada indikasi bahwa tabel tersebut tidak ada, jadi disarankan agar Anda menggunakan perintah untuk menentukan tabel apa saja yang tersedia di database.
Jalankan SHOW TABLES atau SHOW CREATE TABLE pada setiap tabel induk. Setiap tabel yang mengembalikan kesalahan 1146 menunjukkan bahwa tabel telah dibuat dengan urutan yang salah.
Solusinya adalah menjalankan CREATE TABLE yang hilang dan coba lagi atau nonaktifkan pemeriksaan kunci asing untuk sementara. Penting untuk melakukan langkah ini selama pemulihan cadangan di mana referensi melingkar mungkin ada.
Jalankan kode berikut untuk memperbaiki kesalahan:
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS; SET FOREIGN_KEY_CHECKS=0; SOURCE /backups/mydump.sql; -- restore your backup within THIS session SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
Tabel atau indeks dalam tanda kutip penyalahgunaan referensi kendala
Jika Anda ingin mendiagnosis kesalahan ini, periksa setiap deklarasi KUNCI ASING dan pastikan tidak ada tanda kutip di sekitar kualifikasi objek atau ada tanda kutip di sekitar tabel dan satu pasang di setiap nama kolom.
Ini dapat diatasi dengan tidak mengutip apa pun atau mengutip tabel dan kolom secara terpisah.
Kunci lokal, tabel asing, atau kolom dalam referensi kendala salah ketik
Dimungkinkan untuk mendiagnosis kesalahan ini dengan menjalankan TAMPILKAN TABEL dan TAMPILKAN KOLOM dan membandingkan string dengan yang ditentukan dalam deklarasi REFERENSI Anda. Kesalahan ketik harus diperbaiki segera setelah ditemukan.
Kolom yang dirujuk batasan tidak memiliki jenis atau lebar yang sama dengan kolom asing
Untuk diagnosis, gunakan induk SHOW CREATE TABLE untuk memastikan bahwa kolom lokal dan kolom yang direferensikan berisi tipe data dan lebar yang sama.
Masalah dapat diatasi dengan mengedit pernyataan DDL Anda untuk memastikan bahwa definisi kolom di tabel anak cocok dengan yang ada di tabel induk.
Benda asing bukanlah KUNCI apapun
Untuk mendiagnosis masalah ini, gunakan induk SHOW CREATE TABLE untuk memeriksa bagian REFERENSI tabel untuk memastikan bahwa kolom yang menunjuk ke sana tidak diindeks.
Perbaiki masalah dengan membuat kolom menjadi KEY, UNIQUE KEY, atau PRIMARY KEY.
Kunci asing adalah multi-kolom PK atau Inggris, di mana kolom yang direferensikan bukan yang paling kiri
Untuk mendiagnosis kesalahan ini, lakukan perintah induk SHOW CREATE TABLE untuk menentukan apakah bagian REFERENSI menunjuk ke kolom yang ada di beberapa indeks multi-kolom tetapi bukan yang paling kiri dalam definisinya.
Anda dapat memperbaiki masalah dengan menambahkan indeks ke tabel induk di mana kolom yang direferensikan adalah kolom paling kiri atau satu-satunya.
Kumpulan karakter/kolasi yang berbeda di antara dua tabel/kolom
Untuk mendiagnosis masalah, jalankan induk SHOW CREATE TABLE dan verifikasi bahwa bagian CHARACTER SET dan COLLATE kolom anak cocok dengan yang ada di tabel induk.
Untuk memperbaikinya, pastikan DDL tabel anak cocok dengan kumpulan karakter dan susunan tabel/kolom induknya, atau ALTER tabel induk sehingga definisinya cocok dengan definisi anak.
Tabel induk tidak menggunakan InnoDB
Masalahnya dapat didiagnosis dengan menjalankan induk SHOW CREATE TABLE dan memeriksa ENGINE=INNODB.
ALTER tabel induk untuk beralih dari MySQL ke InnoDB untuk mengatasi masalah ini.
Bagaimana Menemukan Alasan Error “Cannot Add Foreign Key Constraint”?
Kesalahan ini tidak menunjukkan alasan spesifik ketidakmampuan MySQL untuk mengimplementasikan batasan kunci asing pada tabel, yang sangat umum.
Untuk membantu mengatasi masalah ini, Anda perlu mengidentifikasi penyebab pastinya. Anda dapat melakukannya dengan menjalankan kueri berikut di klien MySQL Anda:
SHOW ENGINE INNODB STATUS;
Tiga field akan dikembalikan dari query ini: Type, Name, dan Status. KESALAHAN KUNCI ASING TERBARU dapat diidentifikasi dengan memperluas kolom status hasil.
Bagian ini bertujuan untuk mengidentifikasi mengapa kueri perubahan terakhir gagal sehingga Anda dapat memperbaiki masalah tersebut.
Biasanya ada ketidaksesuaian antara tipe kolom di tabel utama dan tabel asing sebagai penyebab masalah ini.
Masalahnya juga bisa disebabkan oleh ketidakcocokan antara tipe mesin dua tabel, seperti MyISAM dan InnoDB.
Dimungkinkan juga karena susunan tabel yang berbeda, satu menggunakan UTF-8 dan yang lainnya menggunakan latin1.
Anda harus memperhatikan faktor-faktor berikut:
Mesin : Setiap tabel harus dikonfigurasi dengan mesin database yang sama, misalnya, InnoDB.
Datatype : Dalam satu tabel, kedua kolom harus memiliki datatype. int(11)
datatype. int(11)
“, sedangkan di lain, smallint(5)
akan menyebabkan masalah.
Collation : Untuk memastikan kompatibilitas, kedua charset kolom harus sama, misalnya, UTF8.
Hati -hati : Kolom masih bisa berbeda, bahkan jika tabel Anda memiliki Kolasi yang sama.
Unik : Kunci asing harus merujuk ke bidang unik di tabel referensi, biasanya yang utama.
Ungisned : Dimungkinkan untuk satu tabel memiliki kunci yang tidak ditandatangani dan tabel lainnya tidak memiliki kunci yang tidak ditandatangani.
Bagaimana Cara Memperbaiki Error MySQL “#1215 – Cannot Add Foreign Key Constraint” (4 Metode)?
Setelah membahas berbagai penyebab pesan kesalahan ini, kami telah beralih ke langkah berikutnya. Kesalahan ini perlu diperbaiki, jadi mari kita lihat bagaimana melakukannya dengan empat metode efektif.
Metode 1: Periksa ketersediaan meja
Untuk mulai memecahkan masalah galat, Anda dapat memeriksa apakah tabel tersebut ada dengan menjalankan perintah berikut:
show tables;
Jelas dari kode ini bahwa batasan dapat dibuat sejak tabel tersedia.
Metode 2: Pastikan Tabel Induk Menggunakan InnoDB
Investigasi lebih lanjut dapat dilakukan dengan memeriksa set mesin penyimpanan ke tabel database. Perintah berikut dapat digunakan untuk melakukannya:
SHOW CREATE TABLE parent
Hasilnya adalah Anda akan menemukan bahwa InnoDB bukanlah mesin penyimpanan. Karena ENGINE=MYISAM telah disetel, Anda dapat mengubah mesin penyimpanan dengan menjalankan perintah berikut:
ALTER TABLE parent ENGINE=INNODB;
Akhirnya dimungkinkan untuk memperbaiki kesalahan dengan metode ini.
Metode 3: Periksa apakah ada kutipan yang tidak pantas
Untuk setiap deklarasi KUNCI ASING, pastikan tidak ada tanda kutip yang disisipkan di sekitar kualifikasi objek atau tanda kutip terpisah mengelilingi nama tabel dan kolom.
Dengan metode ini, perlu untuk tidak mengutip apa pun atau mengutip kolom dan tabel secara terpisah untuk memperbaiki kesalahan.
Metode 4: Memverifikasi Apakah Kunci Ada atau Tidak
Saat memasukkan perintah MySQL, perlu untuk memastikan bahwa perintah yang dimasukkan benar. Pemeriksaan silang memastikan bahwa pelanggan tidak mereferensikan kunci tabel yang tidak ada di tabel target.
Oleh karena itu, pelanggan perlu mengoreksi cara menggunakan kunci di atas meja. Kolom yang digunakan untuk ON DELETE SET NULL mungkin tidak memiliki definisi nol dalam beberapa kasus.
Untuk mencegah kesalahan MySQL 1215, Anda harus memastikan bahwa kolom disetel ke nilai null default.
Kesimpulan
Artikel ini telah menjelaskan penyebab error “#1215 – Cannot Add Foreign Key Constraint” MySQL, cara mencari penyebabnya, dan cara memperbaikinya dengan empat metode efektif.
Terima kasih telah meluangkan waktu untuk meninjau artikel ini. Dengan senang hati kami mempersembahkannya kepada Anda. Di bagian komentar, silakan kirim pertanyaan atau komentar.
Silakan sukai dan ikuti halaman Facebook dan Twitter kami jika Anda ingin tetap mengetahui berita terbaru.