Что такое mysql error 1025 (HY000): ошибка при переименовании './foo' (errno: 150) означает?

Я попробовал это в 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)

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

Ответ 1

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

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

ПОКАЗАТЬ СОЗДАТЬ область ТАБЛИЦЫ;

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

CONSTRAINT region_ibfk_1 ИНОСТРАННЫЙ КЛЮЧ (country_id) ССЫЛКИ country (id) ON УДАЛИТЬ НЕТ ACTION ON UPDATE NO ACTION

Теперь просто выпустите:

изменить внешний вид таблицы регистров region_ibfk_1;

И наконец:

изменить столбец падения таблицы таблицы COUNTRY_ID;

И тебе хорошо идти!

Ответ 2

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

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

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

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

Ответ 3

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

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

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL';

//Оставьте здесь иностранный ключ!

SET [email protected]_SQL_MODE;
SET [email protected]_FOREIGN_KEY_CHECKS;
SET [email protected]_UNIQUE_CHECKS;

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

Ответ 4

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

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

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

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

Спасибо

Ответ 5

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

Ответ 6

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

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

alter table table_name drop foreign_key_col_name;

Ответ 7

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

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

Используйте категории SHOW CREATE TABLE, чтобы показать имя ограничения.

Скорее всего, это будут категории_ibfk_1

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

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

Ответ 8

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

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

Ответ 9

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

Однако для устранения этой проблемы существует простой "взлом":

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

SET FOREIGN_KEY_CHECKS = 0;

Затем вы можете выполнить свои команды.

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

SET FOREIGN_KEY_CHECKS = 1;

Удачи вам в ваших усилиях.

Ответ 10

Выполнение

SET FOREIGN_KEY_CHECKS=0;

до того, как Операция также может выполнить трюк.

Ответ 11

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

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

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

Ответ 12

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

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

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

  • Теперь выполните запрос: ALTER table tableNamexx DROP KEY foreignKeyName;

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