我和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”)参考“t_orders”(“orderID”)ON更新CASCADE上的DELCAD 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;
但为什么我必须这样做?
感谢您的反馈
答案 0 :(得分:2)
您尝试验证的t_order_items和t_orders之间存在约束。在丢弃表之前,必须首先禁用它们。这很好,因为它可以保护您和您的数据。外键可能已被删除,但约束不是。