我曾嘗試加入這樣一個外鍵...的MySQL 5.5中添加外鍵失敗,錯誤[HY000] [150]和[HY000] [1005]
ALTER TABLE OrderLineItem
ADD CONSTRAINT
FK_OrderLineItem_ShippingType_name FOREIGN KEY
(shippingType)
REFERENCES ShippingType(name);
或者這樣在MySQL 5.5。 ..
alter table OrderLineItem add foreign key
FK_OrderLineItem_ShippingType (shippingType) references ShippingType(name);
每次我看到下面的錯誤。
[2011-11-18 15點07分04秒] [HY000] [150]創建表 'realtorprint_dev_dev /#SQL-7d0_80' 與外鍵約束失敗。 引用表中沒有索引,其中引用列 顯示爲第一列。
[2011-11-18 15時07分04秒] [HY000] [1005]無法創建表 'realtorprint_dev_dev#SQL-7d0_80。'(錯誤:150)
兩者的OrderLineItem。 shippingType和ShippingType.name的varchar(50)類型不爲null。 ShippingType.name是ShippingType的主鍵。
這裏是顯示的結果上ShippingType創建表以及...的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;
我錯過了它作爲主鍵的位。讓我檢查 –
適合我 - 是兩列表中的列完全一樣嗎?我發現有一個類型不匹配(排序等) –
哇,看起來你是對的。 – benstpierre