Tôi đã thử thêm một khóa ngoại như thế này ...MySQL 5,5 thêm khóa ngoại thất bại với lỗi [HY000] [150] và [HY000] [1005]
ALTER TABLE OrderLineItem
ADD CONSTRAINT
FK_OrderLineItem_ShippingType_name FOREIGN KEY
(shippingType)
REFERENCES ShippingType(name);
Hoặc như thế này trong Mysql 5.5. ..
alter table OrderLineItem add foreign key
FK_OrderLineItem_ShippingType (shippingType) references ShippingType(name);
Mỗi lần tôi thấy lỗi sau.
[2011-11-18 15:07:04] [HY000] [150] Tạo bảng 'realtorprint_dev_dev/# sql-7d0_80' với ràng buộc khóa ngoài không thành công. Không có chỉ mục trong bảng được tham chiếu, trong đó các cột được tham chiếu xuất hiện dưới dạng cột đầu tiên.
[2011/11/18 15:07:04] [HY000] [1005] Không thể tạo bảng 'realtorprint_dev_dev # sql-7d0_80.' (Errno: 150)
Cả OrderLineItem. shippingType và ShippingType.name có một loại varchar (50) không null. ShippingType.name là khóa chính của ShippingType.
Đây là kết quả của chương trình tạo bảng trên ShippingType cũng như 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;
Tôi đã bỏ lỡ một chút về nó là khóa chính. Hãy để tôi kiểm tra –
Làm việc cho tôi - là các cột chính xác cùng loại trong cả hai bảng? Tôi đã nhìn thấy điều này khi có một loại không phù hợp nhỏ (collation vv) –
Wow, có vẻ như bạn đã đúng. – benstpierre