Ошибка MySql 1025

Я пытаюсь удалить столбец внешнего ключа в таблице, которую я назвал 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'

2 ответа

Сначала отключите внешние ключи

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;

Капля Foreign key первый:

ALTER TABLE ProductInvoice DROP FOREIGN KEY ....;

а потом:

ALTER TABLE ProductInvoice DROP COLUMN PersonID;
Другие вопросы по тегам