Что делает mysql error 1025 (HY000): ошибка при переименовании './foo' (errorno: 150) mean?

Я пробовал это в mysql:

mysql> alter table region drop column country_id;

и получил это:

ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)

какие идеи? Иностранные ключевые вещи?

12 ответов


вы обычно получаете эту ошибку, если ваши таблицы используют движок InnoDB. В этом случае вам придется удалить внешний ключ, а затем выполнить alter table и удалить столбец.

но сложная часть заключается в том, что вы не можете удалить внешний ключ, используя имя столбца, но вместо этого вам придется найти имя, используемое для его индексирования. Чтобы найти это, выполните следующий выбор:

показать создать область таблицы;

Это должно показать вам имя индекс, что-то вроде этого:

ограничения region_ibfk_1 внешняя Ключ (country_id) ссылки country (id) ПРИ УДАЛЕНИИ НЕТ ДЕЙСТВИЕ ПО ОБНОВЛЕНИЮ НЕТ ДЕЙСТВИЯ

теперь просто вопрос:

alter TABLE region drop внешний ключ region_ibfk_1;

и наконец:

alter TABLE region drop column country_id;

и вы хорошо идти!


это действительно ошибка внешнего ключа, вы можете узнать, используя perror:

shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

чтобы узнать больше о том, что не удалось, вы можете использовать SHOW ENGINE INNODB STATUS и найдите последний раздел ошибки внешнего ключа, в котором содержатся сведения о том, что не так.

в вашем случае, это скорее всего что-то ссылается на столбец country_id.


вы также можете получить эту ошибку, пытаясь удалить несуществующий внешний ключ. Поэтому при удалении внешних ключей, всегда убедитесь, что они действительно существуют.

Если внешний ключ существует, и вы все еще получаете эту ошибку, попробуйте следующее:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

/ / отбросьте внешний ключ здесь!

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

это всегда делает трюк для меня :)


просто запустите запрос alter table, используя " KEY "вместо" FOREIGN KEY " в инструкции drop. Я надеюсь, что это поможет решить проблему и отбросит ограничение внешнего ключа, и вы можете изменить столбцы таблицы и удалить таблицу.

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

здесь DROP KEY вместо DROP FOREIGN KEY,

надеюсь, что это поможет.

спасибо


У меня были подобные проблемы однажды. Я удалил первичный ключ из таблицы A, но когда я пытался удалить столбец внешнего ключа из таблицы B, мне была показана та же ошибка.

вы не можете удалить внешний ключ, используя имя столбца, и обойти это в PHPMyAdmin или с MySQL, сначала удалите ограничение внешнего ключа перед переименованием или удалением атрибута.


Я знаю, это старый пост, но это первый удар по любимой поисковой системе каждого, если вы ищете ошибку 1025.

тем не менее, есть простой "хак" для исправления этой проблемы:

перед выполнением команд сначала необходимо отключить проверку ограничений внешнего ключа с помощью этой команды:

SET FOREIGN_KEY_CHECKS = 0;

затем вы можете выполнить свою команду(ы).

после того как вы закончите, не забудьте включить внешний ключ ограничениями, проверьте еще раз, используя эту команду:

SET FOREIGN_KEY_CHECKS = 1;

удачи в ваших начинаниях.


посмотрите в файле ошибок для вашей базы данных mysql. Согласно ошибка #26305 мой SQL не дает вам причину. Эта ошибка существует с MySQL 4.1; -)


Если вы используете клиент, такой как MySQL Workbench, щелкните правой кнопкой мыши нужную таблицу, из которой должен быть удален внешний ключ, затем выберите вкладку Внешний ключ и удалите индексы.

затем вы можете запустить запрос следующим образом:

alter table table_name drop foreign_key_col_name;

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

чтобы узнать, какая таблица вызвала ошибку, вы можете запустить SHOW ENGINE INNODB STATUS а затем посмотрите на LATEST FOREIGN KEY ERROR раздел

используйте SHOW CREATE TABLE categories для отображения имени ограничения.

скорее всего, это будет categories_ibfk_1

используйте имя, чтобы сначала удалить внешний ключ, а затем столбец:

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;

делаешь

SET FOREIGN_KEY_CHECKS=0;

перед операцией также может сделать трюк.


Я бы предположил, что проблема ограничения внешнего ключа. Это country_id используется в качестве внешнего ключа в другой таблице?

Я не DB guru, но я думаю, что решил такую проблему (где было ограничение fk), удалив fk, сделав мой материал alter table, а затем переделав материал fk.

Мне будет интересно услышать, каков результат-иногда mysql довольно загадочный.


в моем случае я использовал MySQL workbench, и я столкнулся с той же проблемой при удалении одного из моих столбцов в таблице. Я не смог найти имя внешнего ключа. Я выполнил следующие шаги, чтобы решить эту проблему:

  1. RT. нажмите на свою схему и выберите "инспектор схем". Это дает вам различные таблицы, столбцы, индексы, ect.

  2. перейдите на вкладку с именем "индексы" и найдите имя столбца под столбцом с именем "столбец". Однажды найдено проверьте имя таблицы для этой записи под именем столбца "таблица". Если он соответствует имени нужной таблицы, запишите имя внешнего ключа из столбца с именем "Name".

  3. теперь выполните запрос: ALTER table TABLENAMEXX DROP KEY foreignKeyName;

  4. теперь вы можете выполнить оператор drop, который должен успешно выполняться.