MySQL 5.5 foreign key hinzufügen schlägt fehl mit Fehler [HY000][150] und [HY000][1005]
Habe ich versucht, indem ein Fremdschlüssel so...
ALTER TABLE OrderLineItem
ADD CONSTRAINT
FK_OrderLineItem_ShippingType_name FOREIGN KEY
(shippingType)
REFERENCES ShippingType(name);
Oder wie das in Mysql 5.5...
alter table OrderLineItem add foreign key
FK_OrderLineItem_ShippingType (shippingType) references ShippingType(name);
Jedes mal, wenn ich den folgenden Fehler.
[2011-11-18 15:07:04] [HY000][150] Tabelle Erstellen
'realtorprint_dev_dev/#sql-7d0_80' mit foreign key-Einschränkung ist fehlgeschlagen.
Es gibt keinen index in der referenzierten Tabelle, in dem die referenzierten Spalten
erscheinen als die ersten Spalten.[2011-11-18 15:07:04] [HY000][1005] Can ' T create table
'realtorprint_dev_dev.#sql-7d0_80' (errno: 150)
Beide OrderLineItem.shippingType und ShippingType.Namen haben eine Art varchar(50) not null. ShippingType.name ist der Primärschlüssel der ShippingType.
Hier ist das Ergebnis von show create table auf ShippingType sowie OrderLineItem...
CREATE TABLE `shippingtype` (
`name` varchar(50) CHARACTER SET latin1 NOT NULL DEFAULT '',
`description` varchar(255) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `orderlineitem` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`description` varchar(255) CHARACTER SET latin1 NOT NULL,
`lineNumber` int(11) NOT NULL,
`quantity` int(11) NOT NULL,
`quantityMultiplier` int(11) NOT NULL,
`unitPrice` decimal(10,2) NOT NULL,
`order_id` bigint(20) NOT NULL,
`productDefinition_id` bigint(20) NOT NULL,
`mlsId` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
`printProviderUnitCost` decimal(10,2) NOT NULL,
`shippingType` varchar(50) NOT NULL,
`address` varchar(255) DEFAULT NULL,
`zipPostal` varchar(255) NOT NULL,
`city` varchar(255) NOT NULL,
`stateProvince` varchar(255) NOT NULL,
`country` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_OrderLineItem_productDefinition_id` (`productDefinition_id`),
KEY `idx_OrderLineItem_order_id` (`order_id`),
CONSTRAINT `FK_OrderLineItem_order_id` FOREIGN KEY (`order_id`) REFERENCES `userorder` (`id`),
CONSTRAINT `FK_OrderLineItem_productDefinition_id` FOREIGN KEY (`productDefinition_id`) REFERENCES `productdefinition` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10029 DEFAULT CHARSET=utf8;
- Ich vermisste die etwas über dem Primärschlüssel. Lassen Sie mich überprüfen
- Funktioniert bei mir - sind die Spalten genau die gleiche Art in beiden Tabellen? Ich habe gesehen, dass dies, wenn es eine leichte type mismatch (Sortierung etc)
- Wow, sieht aus wie Sie Recht hatten.
- Cool - ich aktualisiert meine Antwort zu gehören - ich verbrachte ein paar Stunden mit Blick auf dieses eine mal in mysql 🙂 das ist der Grund, warum ich mich erinnere.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es möglich, dass Mysql gibt diese schlechte Fehler, wenn die Spalte Typen nicht exakt übereinstimmen - check-Sortierung /Größe etc.
orderLineItem.shippingType
hat Zeichen gesetztutf8
, aberShippingType.name
hat Zeichen gesetztlatin1
. Diese sind nicht kompatibel für die Zwecke der Fremdschlüssel verweist.