MySQL 5.5 добавить внешний ключ не удается с ошибками [HY000] [150] и [HY000] [1005] - PullRequest
12 голосов
/ 19 ноября 2011

Я пытался добавить внешний ключ, как это ...

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;

Ответы [ 2 ]

32 голосов
/ 19 ноября 2011

Возможно, что Mysql выдает эту ошибку, когда типы столбцов не совпадают точно - проверьте параметры сортировки / размера и т. Д.

7 голосов
/ 19 ноября 2011

orderLineItem.shippingType имеет набор символов utf8, но ShippingType.name имеет набор символов latin1. Они не совместимы для ссылок на внешние ключи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...