SORU
26 Ocak 2012, PERŞEMBE


Hata Kodu: 1005. 't tablo oluşturabilir '...' (hata: 150)

İnternette bu sorun için bir çözüm aradım ama hiçbir çözüm benim davam için çalıştım sorular ÇOK kontrol ettim.

Tabloda sira_no yabancı anahtar, metal_kod için oluşturmak istiyorum.

ALTER TABLE sira_no 
    ADD CONSTRAINT METAL_KODU FOREIGN KEY(METAL_KODU) 
    REFERENCES metal_kod(METAL_KODU) 
    ON DELETE SET NULL 
    ON UPDATE SET NULL ;

Bu komut verir:

Error Code: 1005. Can't create table 'ebs.#sql-f48_1a3' (errno: 150) 

Başvurulan tablo için dizin ekleme çalıştım:

CREATE INDEX METAL_KODU_INDEX ON metal_kod (METAL_KODU);

METAL_KODU her iki tablo (karakter seti ve harmanlama) kontrol ettim. Ama bu soruna bir çözüm bulamadı. Herkes herhangi bir fikir var mı? Şimdiden teşekkürler.

EDİT: Burada metal_kod tablosu:

METAL_KODU  varchar(4)  NO  PRI     
DURUM   bit(1)  NO          
METAL_ISMI  varchar(30) NO          
AYAR_YOGUNLUK   smallint(6) YES     100 

CEVAP
26 Ocak 2012, PERŞEMBE


Hata Kodu: 1005 -- kodunuzda yanlış birincil anahtar bir başvuru yok

genellikle referans FK bir alan var sayesinde. yazım hatası hata var,ya da aynı olmalıdır edici olabilir, ya da alan-bir tür uyuşmazlığı var. FK-bağlı alanlar tanımlar tam olarak eşleşmesi gerekir.

Bilinen bazı nedenler olabilir :

  1. İki anahtar alanları tipi ve boyutu tam olarak uyuşmuyor. Eğer bir INT(10) örneğin, anahtar alanı INT(10) INT(11) TINYINT olması gerekir. Sorgu Tarayıcı bazen görsel açıdan sadece INT(10) INT(11) INTEGER gösterecektir çünkü alan boyutu 12* CREATE TABLE *kullanarak tespit edilebilir. Ayrıca bir SIGNED olmadığını kontrol etmelisiniz ve diğer UNSIGNED. İkisi de tam olarak aynı olmak zorunda.
  2. Başvuru için çalıştığınız anahtar alan bir dizin ve/veya birincil anahtar değil. Eğer ilişki alanlardan biri birincil anahtar ise, bu alan için bir dizin oluşturmanız gerekir.
  3. Yabancı anahtar adı zaten var olan bir anahtarın bir kopyası. Yabancı anahtar adı veritabanı içinde benzersiz olup olmadığını kontrol edin. Sadece bu test için anahtar senin adının sonuna bir kaç rastgele bir karakter ekleyin.
  4. Veya tablo her ikisini de MyISAM bir tablo. Yabancı anahtarları kullanmak için tablolar InnoDB olmalıdır. Eğer her iki tablo MyISAM (aslında, o zaman bir hata iletisi - sadece anahtar yaratmayacağını alamazsınız.) Sorgu Tarayıcıda, tablo türünü belirtebilirsiniz.
  5. 23* DELETE SET NULL*, ama ilgili anahtar alanı 27* NULL*ayarlanmış bir çağlayan belirttiniz. Ya da Çağlayan değiştirerek veya alanı NULL değerleri izin ayarlayarak düzeltebilirsiniz.
  6. Karakter seti ve Harmanlama seçenekleri anahtar sütunları için tablo düzeyi gibi bireysel saha seviyesi de aynı olduğundan emin olun.
  7. Varsayılan değeri (ıe varsayılan=0) yabancı anahtar sütunu var
  8. İlişki alanlardan biri (bileşik) Birleşik anahtar parçası ve kendi bireysel dizin yok. Alan bileşik anahtar bir parçası olarak bir dizin olsa bile, bir kısıtlama olarak kullanmak için sadece bir anahtar alanı için ayrı bir dizin oluşturmak gerekir.
  9. ALTER deyiminde sözdizimi bir hata var ya da ilişki içinde alan adları yanlış yazmış
  10. Yabancı anahtar adı 64 karakter en fazla uzunluğu aşıyor.

daha fazla ayrıntı için başvurun : MySQL Error Number 1005 Can’t create table

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Howcast

    Howcast

    4 EKİM 2007
  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009
  • Shon Gonzales

    Shon Gonzale

    5 EKİM 2014