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)
- Beide Tabellen sind InnoDB.
- Beide Tabellen sind UTF-8.
Beide Spalten sind int (11) unsigned (wodurch color_id(EDIT: Ich wollte das falsch, und das war die Lösung)NOT NULL
keinen Unterschied macht).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 ??
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
@Raolin Das passiert den Besten von uns. Zumindest war deine Frage gut geschrieben. – Kermit
Prost Mate, half mir viel;) –