2015-11-07 98 views
1

我想放一個外鍵列在一個名爲ProductInvoice的表中。我試圖刪除的列名爲PersonID,來自表Person。當我運行查詢MySql錯誤1025

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

看看這裏如何找到和放棄外鍵http://stackoverflow.com/a/19668812/1745672 – Mihai

+0

發佈'SHOW CREATE TABLE ProductInvoice'的結果 – Mihai

+0

@Mihai我編輯了主帖 –

回答

0

跌落Foreign key第一:

ALTER TABLE ProductInvoice DROP FOREIGN KEY ....; 

然後:

ALTER TABLE ProductInvoice DROP COLUMN PersonID; 
+0

我試過這個好吧,它不會工作。我編輯原始帖子以包含錯誤。 –

+0

@RyanDorman您需要使用**'FOREIGN KEY'名稱**。不是列名 – lad2025

+0

自寫這些表以來已經有一段時間了,有沒有辦法很容易地找到它? –

1

首先禁用外鍵

SET foreign_key_checks = 0; 

刪除鍵上是PersonID

ALTER TABLE ProductInvoice 
    DROP INDEX fkPerson; 

現在刪除外鍵

ALTER TABLE ProductInvoice DROP FOREIGN KEY ProductInvoice_ibfk_1; 

刪除列

ALTER TABLE ProductInvoice DROP COLUMN PersonID; 

啓用外鍵:

SET foreign_key_checks = 1;