Подтвердить что ты не робот

# 1025 - Ошибка при переименовании './database/#sql-2e0f_1254ba7' в './database/table' (errno: 150)

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

PRIMARY KEY (user_id, round_number)

Где user_id является внешним ключом.

Я пытаюсь изменить его на это:

PRIMARY KEY (user_id, round_number, created_at)

Я делаю это в phpmyadmin, щелкнув значок основного ключа в представлении структуры таблицы.

Это ошибка, которую я получаю:

#1025 - Error on rename of './database/#sql-2e0f_1254ba7' to './database/table' (errno: 150)

Это база данных MySQL с движком таблицы InnoDB.

4b9b3361

Ответ 1

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

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

Ответ 2

Как уже было сказано, вам нужно сначала удалить FK. На Mysql выполните следующие действия:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;

Ответ 3

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

Ответ 4

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

(Для пользователей PHPMyAdmin: Чтобы удалить ограничения FK в PHPMyAdmin, выберите атрибут, затем нажмите "Вид отношения" рядом с "Просмотр печати" на панели инструментов ниже структуры таблицы)

Ответ 5

Если вы пытаетесь удалить столбец, который является FOREIGN KEY, вы должны найти правильное имя, которое не является именем столбца. Например: если я пытаюсь удалить поле сервера в таблице Alarms, которая является внешним ключом в таблице серверов.

  • SHOW CREATE TABLE alarm; Найдите строку CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`).
  • ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
  • ALTER TABLE `alarm` DROP `server_id`

Это приведет к удалению сервера внешнего ключа из таблицы Alarms.

Ответ 6

У меня была эта проблема, это для внешнего ключа

Нажмите Relation View (например, изображение ниже), затем найдите имя поля, которое вы собираетесь удалить, и в столбце Foreign key constraint (INNODB) просто поставьте выбор впустую! Нет внешнего ключа.

введите описание изображения здесь

Надеюсь, что это работает!

Ответ 7

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

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

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