Я попробовал это в 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)
Любые идеи? Материал внешнего ключа?
Я попробовал это в 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)
Любые идеи? Материал внешнего ключа?
Ответы:
Обычно вы получаете эту ошибку, если ваши таблицы используют движок InnoDB. В этом случае вам придется удалить внешний ключ, а затем выполнить изменение таблицы и удалить столбец.
Но сложность заключается в том, что вы не можете удалить внешний ключ, используя имя столбца, но вместо этого вам придется найти имя, используемое для его индексации. Чтобы найти это, выполните следующую команду:
ПОКАЗАТЬ СОЗДАТЬ СТОЛ РЕГИОНА;
Это должно показать вам имя индекса, примерно так:
ОГРАНИЧЕНИЕ
region_ibfk_1ИНОСТРАННЫХ КЛЮЧЕЙ (country_id) ССЫЛКИcountry(id) НА УДАЛИТЬ НЕТ ДЕЙСТВИЙ НА ОБНОВЛЕНИЕ НЕТ ДЕЙСТВИЙ
Теперь просто оформите:
изменить область таблицы, удалить внешний ключ
region_ibfk_1;
И, наконец,
изменить столбец области таблицы для удаления country_id;
И вам хорошо идти!
Это действительно ошибка внешнего ключа, вы можете узнать с помощью perror:
shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed
Чтобы узнать больше о том, что не удалось, вы можете использовать SHOW ENGINE INNODB STATUSи найти раздел LATEST FOREIGN KEY ERROR, в котором содержатся подробности о том, что не так.
В вашем случае это, скорее всего, причина, что что-то ссылается на столбец 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;
Это всегда помогает мне :)
Просто запустите запрос на изменение таблицы, используя «KEY» вместо «FOREIGN KEY» в операторе удаления. Я надеюсь, что это поможет решить проблему, и уберет ограничение внешнего ключа, и вы сможете изменить столбцы таблицы и удалить таблицу.
ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub;
здесь DROP KEYвместо того , чтобы DROP FOREIGN KEY,
надеюсь, это поможет.
Спасибо
Я знаю, что это старый пост, но это первый удар по всем любимым поисковым системам, если вы ищете ошибку 1025.
Тем не менее, есть простой «взлом» для исправления этой проблемы:
Перед выполнением вашей команды необходимо отключить проверку ограничений внешнего ключа с помощью этой команды:
SET FOREIGN_KEY_CHECKS = 0;
Тогда вы сможете выполнить свою команду (ы).
После того, как вы закончите, не забудьте снова включить проверку ограничений внешнего ключа, используя эту команду:
SET FOREIGN_KEY_CHECKS = 1;
Удачи в ваших усилиях.
У меня были похожие проблемы однажды. Я удалил первичный ключ из ТАБЛИЦЫ A, но когда я пытался удалить столбец внешнего ключа из таблицы BI, была показана та же самая ошибка выше.
Вы не можете удалить внешний ключ, используя имя столбца, и чтобы обойти это в PHPMyAdmin или MySQL, сначала удалите ограничение внешнего ключа перед переименованием или удалением атрибута.
Посмотрите файл ошибок для вашей базы данных 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 категории, чтобы показать имя ограничения.
Скорее всего это будет category_ibfk_1
Используйте имя, чтобы сначала удалить внешний ключ, а затем столбец:
ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;
Я думаю, проблема ограничения внешнего ключа. Используется ли country_id как внешний ключ в другой таблице?
Я не гуру БД, но я думаю, что решил проблему, подобную этой (где было ограничение fk), удалив fk, выполнив изменения таблицы, а затем переделав fk.
Мне будет интересно услышать, каков будет результат - иногда mysql довольно загадочен.
В моем случае я использовал MySQL Workbench и столкнулся с той же проблемой, когда отбрасывал один из моих столбцов в таблице. Я не смог найти название внешнего ключа. Я выполнил следующие шаги, чтобы решить проблему:
Rt. щелкните по своей схеме и выберите «инспектор схемы». Это дает вам различные таблицы, столбцы, индексы и т. Д.
Перейдите на вкладку «Индексы» и найдите имя столбца под столбцом «Столбец». Найдя, проверьте имя таблицы для этой записи под именем столбца «Таблица». Если он соответствует имени нужной вам таблицы, запишите имя внешнего ключа из столбца с именем «Имя».
Теперь выполните запрос: ALTER table tableNamexx DROP KEY foreignKeyName;
Теперь вы можете выполнить оператор сброса, который будет выполнен успешно.
Я получил эту ошибку с MySQL 5.6, но это не имеет ничего общего с внешними ключами. Это было на машине с Windows 7 Professional, действующей в качестве сервера в небольшой локальной сети.
Клиентское приложение выполняло пакетную операцию, которая создает таблицу, заполняет ее некоторыми внешними данными, затем запускает запрос, объединяющий постоянные таблицы, а затем удаляет «временную» таблицу. Этот пакет делает это примерно 300 раз, и эта конкретная процедура выполнялась неделя за неделей в течение нескольких лет, когда внезапно мы получаем ошибку 1025, Невозможно переименовать проблему в случайной точке в пакете.
В моем случае приложение использовало 4 оператора DDL: CREATE TABLE, затем 3 CREATE INDEX, внешнего ключа нет. Однако только 2 из этих индексов фактически создаются, и фактический файл таблицы .frm был переименован в точке сбоя.
Моим решением было избавиться от отдельных операторов CREATE INDEX и создать их с помощью оператора CREATE TABLE. Это на момент написания статьи решило проблему для меня и моей помощи, когда кто-то почесал голову, когда нашел эту ветку.
averageRatings = FOREACH groupedRatings GENERATE группа AS movieID, AVG (ratings.rating) AS avgRating, COUNT (ratings.rating) AS numRatings;
Если вы используете какую-либо команду, как указано выше, вы должны использовать группу маленькими буквами. Это может решить вашу проблему, это решило мою. По крайней мере, в сценарии PIG.