MySQL Can't Add Foreign Key Constraint Hatası Nasıl Düzeltilir?

Yayınlanan: 2022-12-22

MySQL Yabancı Anahtar Kısıtlaması Yapamıyor ” hatasını nasıl düzeltirsiniz ? Bir MySQL tablosuna yabancı anahtar kısıtlaması eklemeye çalışırken aşağıdaki hata mesajını alabilirsiniz: " HATA 1215 (HY000): Yabancı anahtar kısıtlaması eklenemiyor ".

Bunun gibi bir hata çok geneldir ve MySQL'in neden bir tabloya yabancı anahtar kısıtlaması ekleyemediğine ilişkin özel ayrıntılar sağlamaz. Bu sorunu çözmek için sorunun tam nedenini belirlemeniz gerekir.

Bu makale MySQL'in “#1215 – Cannot Add Foreign Key Constraint” hatasının sebebini, sebebinin nasıl bulunacağını ve dört etkili yöntemle nasıl düzeltileceğini açıklayacaktır.

MySQL Can't Add Foreign Key Constraint Hatası Nasıl Düzeltilir?

MySQL “#1215 – Can't Add Foreign Key Constraint” Hatasının Sebebi Nedir?

Bu hatanın çeşitli nedenleri olabilir. Bu hatanın nedenini belirlemek için SHOW ENGINE INNODB STATUS'un LATEST FOREIGN KEY ERROR bölümünü incelemek en doğrusudur.

Bu şekilde sorunu daha iyi anlayacaksınız. Durumunuzu aşağıdaki listeden tanımlayabileceksiniz:

Genellikle dökümleri yüklerken, kısıtlamanın başvurduğu tablo veya dizin mevcut değildir.

Bazen, müşterilerin kısıtlamalar eklemek istediği veritabanı tablosu mevcut değildir ve bu da 1215 hata mesajına neden olur.

Ancak tablonun var olmadığına dair bir gösterge yoktur, bu nedenle veritabanında hangi tabloların mevcut olduğunu belirlemek için komutu kullanmanız önerilir.

Üst tabloların her birinde SHOW TABLES veya SHOW CREATE TABLE komutunu çalıştırın. 1146 hatası döndüren herhangi bir tablo, tabloların yanlış sırada oluşturulduğunu gösterir.

Çözüm, eksik CREATE TABLE'ı çalıştırmak ve yeniden denemek veya yabancı anahtar denetimlerini geçici olarak devre dışı bırakmaktır. Döngüsel referansların mevcut olabileceği yedekleme geri yüklemeleri sırasında bu adımı gerçekleştirmek önemlidir.

Hatayı düzeltmek için aşağıdaki kodu çalıştırın:

 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;

Kısıtlamadaki tablolar veya dizinler kötüye kullanım tırnaklarına başvuruyor

Bu hatayı teşhis etmek istiyorsanız, her YABANCI ANAHTAR bildirimini inceleyin ve nesne niteleyicileri etrafında tırnak olmadığından veya tablo çevresinde tırnak işareti ve her sütun adının etrafında bir çift olduğundan emin olun.

Bu, hiçbir şeyi alıntılamayarak veya tablo ve sütunu ayrı ayrı alıntılayarak çözülebilir.

Kısıtlama referanslarındaki yerel anahtar, yabancı tablo veya sütunda yazım hatası var

SHOW TABLES ve SHOW COLUMNS çalıştırarak ve REFERENCES bildiriminizde belirtilen dizeleri karşılaştırarak bu hatayı teşhis etmek mümkündür. Yazım hatası fark edilir edilmez düzeltilmelidir.

Kısıtlamanın başvurduğu sütun, yabancı sütunla aynı türde veya genişlikte değil

Teşhis için, yerel sütunun ve başvurulan sütunun aynı türde veri ve genişlik içerdiğinden emin olmak için SHOW CREATE TABLE üst öğesini kullanın.

Alt tablodaki sütun tanımının üst tablodakiyle eşleştiğinden emin olmak için DDL deyiminizi düzenleyerek sorun çözülebilir.

Yabancı nesne herhangi bir ANAHTAR değildir

Bu sorunu teşhis etmek için, tablonun REFERENCES bölümünü incelemek üzere SHOW CREATE TABLE üst öğesini kullanarak tabloya işaret eden sütunun dizine alınmadığından emin olun.

Sütunu ANAHTAR, BENZERSİZ ANAHTAR veya BİRİNCİL ANAHTAR yaparak sorunu düzeltin.

Yabancı anahtar, başvurulan sütunun en soldaki olmadığı çok sütunlu bir PK veya UK'dir.

Bu hatayı teşhis etmek için, SHOW CREATE TABLE üst komutunu kullanarak REFERENCES bölümünün bazı çok sütunlu dizinlerde bulunan ancak tanımında en solda yer almayan bir sütuna işaret edip etmediğini belirleyin.

Üst tabloya, başvurulan sütunun en soldaki veya tek sütun olduğu bir dizin ekleyerek sorunu çözebilirsiniz.

İki tablo/sütun arasında farklı karakter kümeleri/harmanlamalar

Sorunu teşhis etmek için, SHOW CREATE TABLE üst öğesini çalıştırın ve alt sütunun KARAKTER SETİ ve HARMANLA bölümlerinin üst tablodakilerle eşleştiğini doğrulayın.

Bunu düzeltmek için alt tablo DDL'nin üst tablosunun/sütununun karakter kümesi ve harmanlaması ile eşleştiğinden emin olun veya üst tabloyu, tanımı alt öğenin tanımıyla eşleşecek şekilde DEĞİŞTİRİN.

Üst tablo InnoDB kullanmıyor

Sorun, SHOW CREATE TABLE ebeveyni çalıştırılarak ve ENGINE=INNODB için kontrol edilerek teşhis edilebilir.

Bu sorunu çözmek için MySQL'den InnoDB'ye geçmek için ana tabloyu DEĞİŞTİRİN.

Cannot Add Foreign Key Constraint Hatasının Nedeni Nasıl Bulunur?

Bu hata, MySQL'in tablo üzerinde çok genel olan bir yabancı anahtar kısıtlaması uygulayamamasının özel nedenini göstermez.

Bu sorunu çözmeye yardımcı olması için tam nedeni belirlemeniz gerekir. Bunu, MySQL istemcinizde aşağıdaki sorguyu çalıştırarak yapabilirsiniz:

 SHOW ENGINE INNODB STATUS;

Bu sorgudan döndürülecek üç alan vardır: Tür, Ad ve Durum. SON YABANCI ANAHTAR HATASI, sonucun durum sütunu genişletilerek belirlenebilir.

Bu bölüm, sorunu çözebilmeniz için son değiştirme sorgusunun neden başarısız olduğunu belirlemeyi amaçlamaktadır.

Bu sorunun nedeni olarak genellikle birincil tablodaki sütunların türü ile yabancı tablo arasında bir uyumsuzluk vardır.

Sorun, MyISAM ve InnoDB gibi iki tablonun motor türleri arasındaki uyumsuzluktan da kaynaklanabilir.

Biri UTF-8 kullanan ve diğeri latin1 kullanan tablolar arasındaki farklı harmanlamalar nedeniyle de mümkündür.

Aşağıdaki faktörlere dikkat etmelisiniz:

Motor : Her tablo aynı veritabanı motoruyla, örneğin InnoDB ile yapılandırılmalıdır.

Veri tipi : Bir tabloda, her iki sütun da aynı “ datatype. int(11) datatype. int(11) ", diğerinde ise smallint(5) sorun çıkarır.

Harmanlama : Uyumluluğu sağlamak için her iki sütun karakter kümesinin de aynı olması gerekir, örneğin UTF8.

Watchout : Tablolarınız aynı Harmanlamaya sahip olsa bile, sütunlar yine de farklı olabilir.

Benzersiz : Yabancı anahtarlar, referans tablosundaki benzersiz alanlara, genellikle birincil olanlara atıfta bulunmalıdır.

Ungisned : Bir tablonun imzasız anahtarlara sahip olması ve diğerinin imzasız anahtarlara sahip olmaması mümkündür.

MySQL “#1215 – Yabancı Anahtar Kısıtlaması Yapılamıyor” Hatası Nasıl Düzeltilir (4 Yöntem)?

Bu hata mesajının farklı nedenlerini tartıştıktan sonra bir sonraki adıma geçtik. Bu hatanın düzeltilmesi gerekiyor, bu yüzden dört etkili yöntemle nasıl yapılacağını görelim.

Yöntem 1: Tablo kullanılabilirliğini kontrol edin

Hatayı gidermeye başlamak için aşağıdaki komutu çalıştırarak tablonun var olup olmadığını kontrol edebilirsiniz:

 show tables;

Bu koddan, tablo mevcut olduğu için kısıtlamanın oluşturulabileceği açıktır.

Yöntem 2: Üst Tablonun InnoDB Kullandığından Emin Olun

Veritabanı tablosuna ayarlanan depolama motoru kontrol edilerek daha fazla araştırma yapılabilir. Bunu yapmak için aşağıdaki komut kullanılabilir:

 SHOW CREATE TABLE parent

Sonuç olarak, InnoDB'nin depolama motoru olmadığını göreceksiniz. ENGINE=MYISAM ayarlandığından, aşağıdaki komutu çalıştırarak depolama motorunu değiştirebilirsiniz:

 ALTER TABLE parent ENGINE=INNODB;

Sonunda hatayı bu yöntemle düzeltmek mümkün.

Yöntem 3: Uygunsuz alıntı olup olmadığını kontrol edin

Her YABANCI ANAHTAR bildirimi için, nesne niteleyicilerinin etrafına tırnak işareti eklenmediğinden veya tablo ve sütun adlarının çevresinde ayrı tırnak işaretleri bulunduğundan emin olun.

Bu yöntemle hatanın düzeltilmesi için ya hiç alıntı yapılmaması ya da sütun ve tablonun ayrı ayrı alıntılanması gerekir.

Yöntem 4: Anahtarın Var Olup Olmadığını Doğrulama

MySQL komutlarını girerken, doğru komutun girildiğinden emin olmak gerekir. Çapraz kontrol, müşterinin hedef tabloda var olmayan bir tablo anahtarına başvurmamasını sağlar.

Bu nedenle, müşterilerin masadaki anahtarı nasıl kullanacakları konusunda düzeltmeleri gerekir. ON DELETE SET NULL için kullanılan sütunun bazı durumlarda boş tanımı olmayabilir.

MySQL hatası 1215'i önlemek için, sütunun varsayılan boş değere ayarlandığından emin olmalısınız.

Çözüm

Bu yazıda MySQL'in “#1215 – Cannot Add Foreign Key Constraint” hatasının nedeni, sebebinin nasıl bulunacağı ve dört etkili yöntemle nasıl düzeltileceği anlatılmıştır.

Bu makaleyi incelemek için zaman ayırdığınız için teşekkür ederiz. Size sunmak bizim için zevktir. Yorum bölümünde, lütfen herhangi bir soru veya yorum yazın.

En son haberlerden haberdar olmak istiyorsanız lütfen Facebook ve Twitter sayfalarımızı beğenin ve takip edin.