2013-05-31 6 views
7

Ich habe viele andere Beiträge über den Empfang von MySQL errno 150 gelesen, als ich versuchte, eine Fremdschlüssel-Copnstraint hinzuzufügen, jedoch habe ich noch keine Lösung gefunden. Ich hoffe, ich mache nichts Dummes. Ich habe einen einfachen Testfall gemacht.Hinzufügen von Fremdschlüsselfehlern in MySQL (errno 150)

  1. Beide Tabellen sind InnoDB.
  2. Beide Tabellen sind UTF-8.
  3. Beide Spalten sind int (11) unsigned (wodurch color_id NOT NULL keinen Unterschied macht). (EDIT: Ich wollte das falsch, und das war die Lösung)

    Hier meine beiden Tabellen sind:

Tabelle 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; 

Tabelle 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; 

I habe gerade diese Tabellen erstellt, es gibt keinen Inhalt. Wenn ich versuche, einen Fremdschlüssel hinzuzufügen, zu verknüpfen widgets.color_id colors.id geschieht dies:

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) 

Ich werde nur hinzufügen, dass ich mein GUI-Tool der Wahl nicht in der Lage zu verwenden - Sequel Pro auf OSX - entweder. Beim Versuch, eine Fremdschlüsselbeziehung zu erstellen, wird dieselbe Fehlermeldung angezeigt. diese

SHOW ENGINE INNODB STATUS kehrt:

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. 

Mache ich etwas lächerlich dumm ??

Antwort

24

color_id ist nicht unsigned und hat eine DEFAULT NULL. Die Spaltentypen müssen identisch sein.

+0

Ok, das beantwortet diese Frage - ja, ich war lächerlich dumm. Ich schwöre, ich habe das "unsigniert" überprüft, obwohl ich die Frage gestellt habe, aber offensichtlich nicht. Wie peinlich. Vielen Dank. – Raolin

+0

@Raolin Das passiert den Besten von uns. Zumindest war deine Frage gut geschrieben. – Kermit

+0

Prost Mate, half mir viel;) –

6

Es ist fast immer ein Fall von Typkonflikt zwischen dem Primärschlüssel und dem Fremdschlüssel.

  • Überprüfen Sie, ob die Tabelle, die Sie Bereich versuchen zu beziehen verwendet einen Motor, der
  • prüfen foreing Tasten wie InnoDB unterstützt, wenn die Spalten identisch eingegeben werden und auf Null gesetzt:

    Einige Tipps in den meisten Fällen helfen . zB (die 2 Spalten MÜSSEN Typ, Schriftgröße und Vorzeichen übereinstimmen)

  • Überprüfen Sie, ob die Zielspalte einen Index oder Primärschlüssel hat.
Verwandte Themen