2015-11-07 2 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; 
Смежные вопросы