# 1025 - Помилка при перейменуванні './database/#sql-2e0f_1254ba7' на './database/table' (помилка: 150)


81

Тому я намагаюся додати первинний ключ до однієї з таблиць у своїй базі даних. Зараз у нього є первинний ключ, такий як:

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.


1
Швидкий пошук за допомогою Google дає мені уявлення, що ця проблема пов’язана з обмеженнями. Можливі корисні посилання: dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html та simplicidade.org/notes/archives/2008/03/mysql_errno_150.html
Лекенштейн,

Відповіді:


139

Ймовірно, існує інша таблиця із зовнішнім ключем, що посилається на первинний ключ, який ви намагаєтесь змінити.

Щоб з’ясувати, яка таблиця спричинила помилку, ви можете запустити її, SHOW ENGINE INNODB STATUSа потім заглянути в LATEST FOREIGN KEY ERRORрозділ.


2
У моєму випадку база даних була нещодавно створена, без таблиць взагалі.
Guilherme Ferreira

33

Як вже було сказано, вам потрібно видалити ФК раніше. На Mysql зробіть це так:

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

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;

1
Ваша відповідь мені справді допомогла. DROP ІНОЗЕМНИЙ КЛЮЧ вирішив проблему. Дякую
Рам Бабу,

1
Це також вирішило мою проблему, але той же сценарій працював і над моєю розробкою MySQL. Це щось змінилося у версії MySQL?
Bancarel Valentin

24

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


13

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

(Для користувачів PHPMyAdmin: щоб видалити обмеження FK у PHPMyAdmin, виберіть атрибут, а потім натисніть "подання відношень" поруч із "видом друку" на панелі інструментів під структурою таблиці)


1
Я думаю, що це найточніша відповідь
MontrealDev,

4

Якщо ви намагаєтесь видалити стовпець, який є ІНОЗЕМНИМ КЛЮЧОМ, ви повинні знайти правильне ім’я, яке не є назвою стовпця. Наприклад: Якщо я намагаюся видалити поле сервера в таблиці Сигнали, яке є зовнішнім ключем таблиці серверів.

  1. SHOW CREATE TABLE alarm; Шукайте CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`)лінію.
  2. ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
  3. ALTER TABLE `alarm` DROP `server_id`

Це видалить сервер зовнішнього ключа з таблиці сигналів.


4

У мене була ця проблема, вона стосується зовнішнього ключа

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

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

Сподіваюся, це працює!


0

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.