2011-11-18 81 views
12

我曾嘗試加入這樣一個外鍵...的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; 
+0

我錯過了它作爲主鍵的位。讓我檢查 –

+1

適合我 - 是兩列表中的列完全一樣嗎?我發現有一個類型不匹配(排序等) –

+0

哇,看起來你是對的。 – benstpierre

回答

29

很可能是MySQL給這個糟糕的錯誤,當列類型不完全匹配 - 檢查整理/大小等。

+2

這是真的!在「create table」語句中使用Dammint「unsigned」!謝謝! – orafaelreis

+0

不要以爲大家這個錯誤沒有說明問題,我認爲這是一種糟糕的編程風格! – Adelin

5

orderLineItem.shippingType has character set utf8,but ShippingType.name has character set latin1。這些與外鍵引用的目的不兼容。

相關問題