Errno 150'ye neden olabilecek birkaç şey var, bu yüzden bu konuyu arayan insanlar için, kapsamlı listeye yakın olduğunu düşünüyorum (Errno 150'nin kaynak nedenleri ):
Errno 150 veya errno 121 için, sadece SHOW ENGINE INNODB STATUS yazarak, "SON YABANCI ANAHTAR HATASI" adlı bir bölüm vardır. Bunun altında, size sorunun ne olduğunu hemen söyleyecek olan çok yararlı bir hata mesajı verecektir. Çalıştırmak için SÜPER ayrıcalıklara ihtiyacınız vardır, bu nedenle sahip değilseniz, aşağıdaki senaryoları test etmeniz yeterlidir.
1) Veri Türleri Eşleşmiyor: Sütun türlerinin aynı olması gerekir
2) Dizine Eklenmemiş (veya Yanlış Sırala Dizine Eklenmemiş) Üst Sütunlar
3) Sütun Harmanları Eşleşmiyor
4) SET NULL DEĞİL, NULL DEĞİL sütununda kullanma
5) Tablo Harmanlamaları Eşleşmiyor: sütun harmanlamaları eşleşse bile, bazı MySQL sürümlerinde bu bir sorun olabilir.
6) Üst Sütun Ana Tabloda Gerçekte Mevcut Değil. Yazımı denetleme (ve belki de sütunun başında veya sonunda bir boşluk)
7) Sütunlardan birindeki dizinlerden biri eksik veya sütun tam bir dizin için çok uzun. MySQL'in (ayarlamadığınız sürece) maksimum tek sütun anahtar uzunluğu 767 bayt olduğunu unutmayın (bu bir varchar (255) UTF sütununa karşılık gelir)
Bir errno 121 almanız durumunda, birkaç neden var:
1) Seçtiğiniz kısıtlama adı zaten alınmış
2) Bazı sistemlerde ifadenizde ve tablo adlarınızda büyük / küçük harf farkı varsa. Bu, bir sunucudan diğerine farklı vaka yönetimi kurallarına sahip bir şekilde giderseniz sizi ısıtabilir.