2011-11-18 19 views
12

ile başarısız MySQL 5.5 yabancı anahtarı eklemek ... Böyle yabancı bir anahtarı ekleyerek denedim hataları [HY000] [150] ve [HY000] [1005]

ALTER TABLE OrderLineItem 
ADD CONSTRAINT 
     FK_OrderLineItem_ShippingType_name FOREIGN KEY 
(shippingType) 
REFERENCES ShippingType(name); 

Veya Mysql 5.5 böyle

. Aşağıdaki hatayı her gördüğümde.

alter table OrderLineItem add foreign key 
FK_OrderLineItem_ShippingType (shippingType) references ShippingType(name); 

dış anahtar kısıtlaması başarısız olan

[2011-11-18 15:07:04] [HY000] [150] 'realtorprint_dev_dev/# SQL-7d0_80' tablo oluşturun. Başvurulan tabloda başvurulan sütunlar ilk sütunlar olarak görünecek bir dizin yok.

[2011-11-18 15:07:04] [HY000] [1005] Tablo oluşturulamaz 'realtorprint_dev_dev # SQL-7d0_80.' (Errno: 150)

Hem OrderLineItem. shippingType ve ShippingType.name bir varchar türü (50) null değil. ShippingType.name, ShippingType öğesinin birincilKeyidir./Harmanlama kontrol - İşte

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

Bunun birincil anahtar olmasının özünü özledim. Benim için –

+1

Çalışmalarını kontrol edeyim - sütunlar her iki tabloda da aynı türde mi? Ben bu tür bir hafif uyuşmazlık (harmanlama vb) olduğunda görüyorum. –

+0

Wow, haklı gibi görünüyor. – benstpierre

cevap

29

mümkündür sütun türleri tam olarak eşleşmediğinde MySQL bu kötü hata veriyor olmasıdır ... gösterinin sonucu yanı OrderLineItem olarak ShippingType üzerinde tablo oluşturmak olduğunu

+2

Bu doğru! "Tablo oluştur" ifadesinde Damar "unsigned"! Teşekkür ederim! – orafaelreis

+0

Çocuklar, hatanın problem hakkında hiçbir şey söylemediğini düşünmeyin, bunun kötü bir programlama tarzı olduğunu düşünüyorum! – Adelin

5

orderLineItem.shippingType, utf8 karakter kümesine sahiptir, ancak ShippingType.name karakter kümesine sahiptir latin1. Bunlar yabancı anahtar referanslar için uyumlu değildir.

İlgili konular