Что означает ошибка mysql 1025 (HY000): ошибка при переименовании «./foo» (errorno: 150)? - PullRequest
155 голосов
/ 02 октября 2008

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

Есть идеи? Материал внешнего ключа?

Ответы [ 13 ]

0 голосов
/ 05 января 2019

Я получил эту ошибку с MySQL 5.6, но она не имела ничего общего с внешними ключами. Это было на машине с Windows 7 Professional, действующей в качестве сервера в небольшой локальной сети.

Клиентское приложение выполняло пакетную операцию, которая создает таблицу, заполняет ее некоторыми внешними данными, затем запускает запрос, объединяющий постоянные таблицы, а затем отбрасывает «временную» таблицу. Эта партия делает это примерно 300 раз, и эта конкретная процедура выполнялась неделя за неделей в течение нескольких лет, когда внезапно мы получаем ошибку 1025, Невозможно переименовать проблему в случайной точке в пакете.

В моем случае приложение использовало 4 оператора DDL: CREATE TABLE, затем 3 CREATE INDEX, внешний ключ отсутствует. Однако только 2 индекса фактически созданы, и фактический файл таблицы .frm был переименован в точке сбоя.

Моим решением было избавиться от отдельных операторов CREATE INDEX и создать их с помощью оператора CREATE TABLE. Это на момент написания статьи решило проблему для меня и моей помощи, когда кто-то почесал голову, когда нашел эту ветку.

0 голосов
/ 25 февраля 2016

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

  1. Rt. щелкните по своей схеме и выберите «инспектор схемы». Это дает вам различные таблицы, столбцы, индексы и т. Д.

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

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

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

0 голосов
/ 02 октября 2008

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

Я не гуру БД, но мне кажется, что я решил проблему, подобную этой (где было ограничение fk), удалив fk, выполнив мои изменения таблицы, а затем переделав fk.

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

...