2013-05-31 20 views
7

(errno 150) MySQL Başarısız. Umarım aptalca bir şey yapmıyorumdur. Basit bir test davası yaptım.ancak ben henüz bir çözüm bulamadık, bir yabancı anahtar copnstraint eklemeye çalışırken MySQL errno 150 alma hakkında diğer birçok mesajları okudum

  1. Her iki tablo InnoDB'nin vardır.
  2. Her iki tablo da UTF-8'dir.
  3. Her iki sütun (bir fark yapmaz hale color_id NOT NULL) int (11) imzasız bulunmaktadır. (DÜZENLEME: BU HAKKINDA YANILMIŞTIR VE BU ÇÖZÜM WAS) İşte

    benim iki tablo vardır:

Tablo widgets:

CREATE TABLE `widgets` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
`name` varchar(100) NOT NULL DEFAULT '', 
`color_id` int(11) DEFAULT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Tablo colors:

CREATE TABLE `colors` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
`name` varchar(10) NOT NULL DEFAULT '', 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

ben Bu tabloları yeni oluşturdum, içerik yok. Ben colors.id için widgets.color_id bağlamak için bir yabancı anahtar kısıtlamasını eklemeye çalıştığınızda, bu gerçekleşir:

mysql> ALTER TABLE `widgets` ADD FOREIGN KEY (`color_id`) REFERENCES `color` (`id`); 

ERROR 1005 (HY000): Can't create table 'production.#sql-7b1_2dd7' (errno: 150) 

Sadece seçim benim GUI aracı kullanmak mümkün olmamıştır ekleyeceğiz - OSX de Sequel Pro - ya da. Yabancı anahtar ilişkisi oluşturmaya çalışırken aynı hata mesajını alıyorum.

SHOW ENGINE INNODB STATUS döner bu:

130531 17:23:06 Error in foreign key constraint of table production/#sql-7b1_2c80: 
FOREIGN KEY (`color_id`) REFERENCES `colors` (`id`): Cannot find an index in 
the referenced table where the referenced columns appear as the first columns, 
or column types in the table and the referenced table do not match for constraint. 

ben gülünç aptal mı yapıyorum ??

cevap

24

color_idunsigned değildir ve DEFAULT NULL sahiptir. Sütun tipleri aynı olmalıdır. hemen hemen her zaman

+0

Tamam, o soru cevaplar - Evet, ben gülünç aptal oldu. Yemin ederim soruyu gönderirken bile "imzasız" ı kontrol ettim, ama belli ki yapmadım. Ne utanç verici. Teşekkür ederim. – Raolin

+0

@Raolin Bu bizim için en iyisi olur. En azından sorunuz iyi yazılmıştı. – Kermit

+0

Şerefe arkadaşları, bana çok yardımcı oldu;) –

6

Onun birincil anahtar ve yabancı anahtar arasındaki tipi uyuşmazlığı bir olgu.

bazı ipuçları çoğu durumda yardımcı olmak için:

  • kontrol edin size alan ilişkilendirmek çalışırken tablo sütunları aynı daktilo ve nulled eğer InnoDB'nin
  • kontrol edin gibi yabancı anahtarlarını destekler bir motor kullanıyorsa . Hedef sütunu bir dizin veya birincil anahtar varsa mesela
  • kontrol (2 sütun tipi, tip boyutu ve işareti ile eşleşmesi ZORUNLU).
İlgili konular