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.
InformationsquelleAutor benstpierre | 2011-11-18
Schreibe einen Kommentar