MySQL Ошибка при удалении индекса (errno 150)

У меня проблема с удалением индекса внешнего ключа, я всегда получаю ту же ошибку

 ALTER TABLE `comments` DROP INDEX `id_user`  

какие выводы

 1025 - Error on rename of './postuj_cz1/#sql-d834_a0c704' 
 to './postuj_cz1/comments' (errno: 150) 

id_user на другой таблице - простой индекс первичного ключа.

Я использую MySQL версии 5.0.85

4 ответа

Решение

По этой ссылке ошибка относится к определению поля первичного ключа. Ошибка не в индексе внешнего ключа.

Проверьте первичный ключ для COMMENTS стол, чтобы убедиться, что он не имеет UNSIGNED Ключевое слово в то время как COMMENTS.id_user внешний ключ имел ключевое слово UNSIGNED. Это ключевое слово вызывало проблему - непоследовательный тип поля.

Чтобы исправить, добавьте UNSIGNED Ключевое слово для определения первичного ключа для COMMENTS Таблица. Или удалите UNSIGNED ключевое слово из определения внешнего ключа...

Есть и другие причины. Например, у меня был уникальный индекс, включающий два отдельных столбца внешнего ключа. Мне пришлось отбросить рассматриваемые внешние ключи, прежде чем я смог отбросить уникальный индекс. (И, очевидно, вы можете добавить внешние ключи позже.)

INNODB: это может быть так же просто, как удалить отношение перед удалением индекса.

Индекс предназначен для внешнего ключа в таблице 'user', поэтому сначала попробуйте эту команду:

SHOW CREATE TABLE my_table

Найти имя ограничения, соответствующего индексу по внешнему ключу,

и после этого попробуйте команду:

ALTER TABLE my_table DROP FOREIGN KEY FK_myconstraintcode

ВНИМАНИЕ: Если вы попытаетесь удалить внешний ключ с именем внешнего ключа, у вас будет ошибка!

Другие вопросы по тегам