Hinzufügen eines Fremdschlüssels schlägt in MySQL fehl (errno 150)

7

Ich habe viele andere Posts über den Empfang von MySQL errno 150 gelesen, als ich versuchte, eine Fremdschlüssel-Copnstraint hinzuzufügen, aber ich habe noch keine Lösung gefunden. Ich hoffe, ich mache nichts Dummes. Ich habe einen einfachen Testfall gemacht.

  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). ( BEARBEITEN: ICH HABE FALSCH, UND DAS WAR DIE LÖSUNG )

    Hier sind meine zwei Tabellen:

Tabelle widgets :

%Vor%

Tabelle colors :

%Vor%

Ich habe gerade diese Tabellen erstellt, es gibt keinen Inhalt. Wenn ich versuche, eine Bedingung für einen Fremdschlüssel hinzuzufügen, um widgets.color_id mit colors.id zu verknüpfen, geschieht Folgendes:

%Vor%

Ich füge nur hinzu, dass ich nicht in der Lage war, mein GUI-Tool der Wahl - Sequel Pro unter OSX - zu verwenden. Beim Versuch, eine Fremdschlüsselbeziehung zu erstellen, wird dieselbe Fehlermeldung angezeigt.

SHOW ENGINE INNODB STATUS gibt das zurück:

%Vor%

Mache ich etwas lächerlich dumm ??

    
Raolin 31.05.2013, 21:30
quelle

2 Antworten

25

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

    
Kermit 31.05.2013, 21:34
quelle
6

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

Einige Tipps, um in den meisten Fällen zu helfen:

  • Überprüfen Sie, ob die Tabelle, auf die Sie zugreifen möchten, eine Engine verwendet, die Foreing-Schlüssel wie InnoDB
  • unterstützt
  • Überprüfen Sie, ob die Spalten identisch typisiert und nulled sind. zB (die 2 Spalten MÜSSEN dem Typ, der Größe und dem Zeichen entsprechen)
  • Überprüfen Sie, ob die Zielspalte einen Index oder Primärschlüssel hat.
rcdmk 31.05.2013 21:37
quelle

Tags und Links