【发布时间】:2012-01-01 15:38:01
【问题描述】:
我尝试过添加这样的外键...
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' (errno: 150)
OrderLineItem.shippingType 和 ShippingType.name 的类型均为 varchar(50),不为空。 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;
【问题讨论】:
-
我错过了关于它是主键的一点。让我检查一下
-
对我有用 - 两个表中的列类型是否完全相同?当存在轻微的类型不匹配(排序规则等)时,我已经看到了这一点
-
哇,看来你是对的。
-
酷 - 我更新了我的答案以包括 - 我花了几个小时在 mysql 中查看这个 :-) 这就是我记得的原因。
标签: mysql foreign-keys dml