2011-11-18 3 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시 7분 4초] [HY000] [150] 'realtorprint_dev_dev/#의 SQL-7d0_80을'테이블 을 만듭니다. 참조 된 열 이 첫 번째 열로 나타나는 참조 된 테이블의 인덱스가 없습니다.

[2011-11-18 15시 7분 4초] [HY000] [1005] 테이블 를 만들 수 없습니다 'realtorprint_dev_dev #의 SQL-7d0_80.'(errno를 : 150)

모두 OrderLineItem. shippingType 및 ShippingType.name의 유형이 varchar (50) not null입니다. ShippingType.name은 ShippingType의 primaryKey입니다./정렬을 체크 - 여기

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

Works for me - 열이 두 테이블에서 정확히 같은 유형입니까? 약간의 타입 불일치 (데이터 정렬 등)가있을 때 이것을 보았습니다 –

+0

와우, 당신이 옳았다 고 생각합니다. – benstpierre

답변

29

이 가능 컬럼 유형이 정확히 일치하지 않는 경우에 MySQL은이 잘못된 오류를 제공한다는 것입니다 ... 쇼의 결과뿐만 아니라 OrderLineItem로 ShippingType에 테이블을 만드는 것입니다 크기 등

+2

사실입니다! "create table"구문에서 Dammint "unsigned"! 고맙습니다! – orafaelreis

+0

오류에 대해 문제에 관해 알려주지 않는다고 생각하지 마십시오. 나쁜 프로그래밍 스타일이라고 생각합니다. – Adelin

5

orderLineItem.shippingType은 문자 집합이 utf8이고, ShippingType.name은 문자 집합이 latin1입니다. 이들은 외부 키 참조를 위해 호환되지 않습니다.

관련 문제