2014-02-16 4 views
6

У меня есть следующие 2 таблицы:падение колонки с внешним ключом в MySQL

CREATE TABLE `personal_info` (
`p_id` int(11) NOT NULL AUTO_INCREMENT, 
`name` text NOT NULL, 
`initials` text NOT NULL, 
`surname` text NOT NULL, 
`home_lang` int(11) NOT NULL, 
PRIMARY KEY (`p_id`), 
KEY `home_lang` (`home_lang`), 
CONSTRAINT `personal_info_ibfk_1` FOREIGN KEY (`home_lang`) REFERENCES `language_list` (`ll_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=latin1 

CREATE TABLE `language_list` (
`ll_id` int(11) NOT NULL AUTO_INCREMENT, 
`name` text NOT NULL, 
PRIMARY KEY (`ll_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=latin1 

Я пытаюсь удалить столбец из таблицы со следующим:

ALTER TABLE `personal_info` DROP `home_lang` 

Но не могу сделать это, так как Я получаю эту ошибку:

#1025 - Error on rename of '.\MyDB\#sql-112c_82' to '.\MyDB\personal_info' (errno: 150) 

Я попытался сначала удалить индекс, а затем удалить столбец с этим:

ALTER TABLE personal_info DROP INDEX home_lang 

Но тогда я получаю следующее сообщение об ошибке:

#1553 - Cannot drop index 'home_lang': needed in a foreign key constraint 

Так что я пытался отказаться от внешнего ключа:

ALTER TABLE personal_info DROP FOREIGN KEY home_lang 

Но получил эту ошибку:

#1025 - Error on rename of '.\MyDB\personal_info' to '.\MyDB\#sql2-112c-8d' (errno: 152) 

Я также попытался сначала установить все значения в null:

update personal_info set home_lang = null 

Но получил эту ошибку:

#1452 - Cannot add or update a child row: a foreign key constraint fails (`MyDB`.`personal_info`, CONSTRAINT `personal_info_ibfk_1` FOREIGN KEY (`home_lang`) REFERENCES `language_list` (`ll_id`)) 

А теперь я застрял. Я пробовал несколько вещей, но просто не могу удалить столбец. Мне не разрешено изменять БД любым способом, кроме удаления столбца.

+0

использование 'SET FOREIGN_KEY_CHECKS = 0;' отключить ограничение –

ответ

18

Ваш синтаксис DROP FOREIGN KEY использует неправильное имя ключа. Он пытается сбросить ваш «простой» индекс на поле home_lang. Это НЕ внешний ключ.

CONSTRAINT `personal_info_ibfk_1` FOREIGN KEY (`home_lang`) REFERENCES `language_list` (`ll_id`) 
      ^^^^^^^^^^^^^^^^^^^^^--- THIS is the name of the foreign key 

Попытка:

ALTER TABLE personal_info DROP FOREIGN KEY `personal_info_ibfk_1` 
Смежные вопросы