我正在尝试在名为ProductInvoice的表中删除外键列。我想要删除的列名为PersonID,来自表Person。当我运行查询
时ALTER TABLE ProductInvoice
DROP COLUMN PersonID;
我收到此错误...
Error Code: 1025. Error on rename of './jkripal/#sql-91c_19ff0' to './jkripal/ProductInvoice' (errno: 150)
有关如何解决此问题的任何建议?我环顾了这个网站,找不到任何有帮助的答案。
这些是SHOW CREATE TABLE ProductInvoice
的结果'ProductInvoice', 'CREATE TABLE `ProductInvoice`
(\n `ProductInvoiceID` int(11) NOT NULL AUTO_INCREMENT,
\n `PersonID` int(11) DEFAULT NULL,
\n `ProductID` int(11) NOT NULL,
\n `InvoiceID` int(11) NOT NULL,
\n `TravelDate` varchar(255) DEFAULT NULL,
\n `TicketNote` varchar(255) DEFAULT NULL,
\n `Quantity` int(11) DEFAULT NULL,
\n `InsuranceTicketCode` varchar(255) DEFAULT NULL,
\n PRIMARY KEY (`ProductInvoiceID`),
\n KEY `fkPerson` (`PersonID`),
\n KEY `fk_ProductInvoice_to_Product` (`ProductID`),
\n KEY `fk_ProductInvoice_to_Invoice` (`InvoiceID`),
\n CONSTRAINT `ProductInvoice_ibfk_1` FOREIGN KEY (`PersonID`) REFERENCES `Person` (`PersonID`),
\n CONSTRAINT `ProductInvoice_ibfk_2` FOREIGN KEY (`ProductID`) REFERENCES `Product` (`ProductID`),
\n CONSTRAINT `ProductInvoice_ibfk_3` FOREIGN KEY (`InvoiceID`) REFERENCES `Invoice` (`InvoiceID`)
\n) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8'
答案 0 :(得分:1)
首先禁用外键
ALTER TABLE ProductInvoice
DROP INDEX fkPerson;
删除PersonID上的密钥
ALTER TABLE ProductInvoice DROP FOREIGN KEY ProductInvoice_ibfk_1;
现在删除外键
ALTER TABLE ProductInvoice DROP COLUMN PersonID;
删除列
SET foreign_key_checks = 1;
启用外键:
{{1}}
答案 1 :(得分:0)
首先删除Foreign key
:
ALTER TABLE ProductInvoice DROP FOREIGN KEY ....;
然后:
ALTER TABLE ProductInvoice DROP COLUMN PersonID;