MySQL Error номер 150 Create Fails на несуществующем внешнем ключе - PullRequest
0 голосов
/ 30 июля 2009

Я боролся с администратором mysql, пытаясь изменить первичный ключ таблицы. Это не позволило бы мне удалить ключевые ключи и переименовать таблицу, отлично, без проблем.

Я удалил исходную таблицу t_order_items, но не могу переименовать t_order_items2 в t_order_items, она завершается с ошибкой 150.

Так что я подумал, что я бы разработал оператор create и ушел от администратора на всякий случай, если бы это была проблема. Следующий этап создания завершается неудачно, но только если таблица называется t_order_items для любого другого имени и успешно выполняется:

DROP TABLE IF EXISTS `web2print`.`t_order_items`;
CREATE TABLE  `web2print`.`t_order_items` (
  `orderID` bigint(20) NOT NULL,
  `productID` bigint(20) NOT NULL,
  `itemprice` decimal(10,2) NOT NULL,
  `itemvat` decimal(2,2) NOT NULL DEFAULT '0.15',
  `quantity` int(10) unsigned NOT NULL,
  `description` varchar(100) NOT NULL,
  `stockCode` varchar(45) DEFAULT NULL,
  `proofpath` varchar(300) DEFAULT NULL,
  `consignmentID` bigint(20) unsigned NOT NULL,
  `name` varchar(45) NOT NULL,
  `order_itemID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`order_itemID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Если я проверю вывод SHOW ENGINE INNODB STATUS;

Я получаю следующий отчет FOREIGN KEY ERROR, который является правильным временем для вставки, но ссылается на внешние ключи из старой (исходной) таблицы, которая была удалена и не существует в этом скрипте создания.

Ошибка в ограничении внешнего ключа таблицы web2print / t_order_items: в таблице нет индекса, который бы содержал столбцы в качестве первых столбцов или типы данных в таблица не совпадает с указанной в ссылочной таблице или один из столбцов ON ... SET NULL объявлен как NOT NULL. Ограничение: , CONSTRAINT "FK_t_order_items_1" FOREIGN KEY ("orderID") ССЫЛКИ "t_orders" ("orderID") НА УДАЛИТЬ КАСКАД НА ОБНОВЛЕНИЕ КАСКАД

На столе нет внешних ключей? они были удалены.

Следующие работы

 SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `web2print`.`t_order_items`;
CREATE TABLE  `web2print`.`t_order_items` (
  `orderID` bigint(20) NOT NULL,
  `productID` bigint(20) NOT NULL,
  `itemprice` decimal(10,2) NOT NULL,
  `itemvat` decimal(2,2) NOT NULL DEFAULT '0.15',
  `quantity` int(10) unsigned NOT NULL,
  `description` varchar(100) NOT NULL,
  `stockCode` varchar(45) DEFAULT NULL,
  `proofpath` varchar(300) DEFAULT NULL,
  `consignmentID` bigint(20) unsigned NOT NULL,
  `name` varchar(45) NOT NULL,
  `order_itemID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`order_itemID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS = 1;

Но почему я должен был это сделать?

Спасибо за любые отзывы

1 Ответ

2 голосов
/ 30 июля 2009

У вас были ограничения между t_order_items и t_orders, которые пытались проверить. Вы должны были сначала отключить их, прежде чем бросить стол. Это хорошо, потому что защищает вас и ваши данные. Внешние ключи могли быть удалены, но ограничения не были.

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