He intentado agregar una clave externa como esto ...MySQL 5.5 añadir clave externa falla con errores [HY000] [150] y [HY000] [1005]
ALTER TABLE OrderLineItem
ADD CONSTRAINT
FK_OrderLineItem_ShippingType_name FOREIGN KEY
(shippingType)
REFERENCES ShippingType(name);
O como esta en MySQL 5.5. ..
alter table OrderLineItem add foreign key
FK_OrderLineItem_ShippingType (shippingType) references ShippingType(name);
Cada vez que veo el siguiente error.
[2011-11-18 15:07:04] [HY000] [150] Crear una tabla 'realtorprint_dev_dev/#sql-7d0_80' con restricción de clave externa falló. No hay un índice en la tabla referenciada donde las columnas referenciadas aparecen como las primeras columnas.
[2011-11-18 15:07:04] [HY000] [1005] No se puede crear la tabla 'realtorprint_dev_dev #sql-7d0_80.' (Error: 150)
Tanto OrderLineItem. shippingType y ShippingType.name tienen un tipo de varchar (50) no nulo. ShippingType.name es la clave principal de ShippingType.
Este es el resultado del programa de creación de tabla de Tipo de envío, así como 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;
Me perdí la parte de que era la clave principal. Déjame revisar –
Funciona para mí: ¿las columnas son exactamente del mismo tipo en ambas tablas? Lo he visto cuando hay un ligero desajuste de tipo (intercalación, etc.) –
Guau, parece que tenía razón. – benstpierre