我和mysql管理员正在努力尝试更改表上的主键。它不会让我这样我删除了四个键并重命名表,没问题。

我现在删除了原始表t_order_items,但是我无法将t_order_items2重命名为t_order_items,它失败并出现150错误。

所以我想我会制作创建声明并离开管理员,以防它出现问题。以下创建stament失败,但只有当表被称为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的外键约束出错: 表中没有包含索引的索引 列作为第一列,或者是数据类型 table与引用表中的表不匹配 或其中一个ON ... SET NULL列被声明为NOT NULL。约束: ,   CONSTRAINT“FK_t_order_items_1” FOREIGN KEY(“orderID”)REFERENCES" t_orders" (“orderID”)ON DELETE CASCADE ON UPDATE CASCADE

桌子上没有外键?他们被删除了。

以下作品

 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;

但为什么我必须这样做?

感谢您的反馈

有帮助吗?

解决方案

您尝试验证的t_order_items和t_orders之间存在约束。在丢弃表之前,必须首先禁用它们。这很好,因为它可以保护您和您的数据。外键可能已被删除,但约束不是。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top