Я боролся с администратором 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;
Но почему я должен был это сделать?
Спасибо за любые отзывы