14

このような外部キーを追加しようとしました...

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 の両方に、null ではない varchar(50) のタイプがあります。ShippingType.name は ShippingType の primaryKey です。

これは、OrderLineItem と同様に ShippingType の show create table の結果です...

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;
4

3 に答える 3

38

列の型が正確に一致しない場合、Mysql がこの悪いエラーを出す可能性があります - 照合順序/サイズなどを確認してください。

于 2011-11-18T22:13:38.390 に答える
9

orderLineItem.shippingTypeには文字セットutf8ShippingType.nameありますが、文字セットがありlatin1ます。これらは、外部キー参照の目的では互換性がありません。

于 2011-11-18T22:41:08.877 に答える