MySQL ALTER TABLE - Добавить индекс + внешний ключ Дайте ошибку 1005

StackOverflow https://stackoverflow.com/questions/3455805

Вопрос

Что не так с этой командой ALTER TABLE:

ALTER TABLE `lp` 
ADD COLUMN `RuleId` INT(10) NOT NULL DEFAULT -111 AFTER `Weight` , , 
ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId` ) REFERENCES `Rules` (`RuleId` ) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD INDEX `fk_1` (`RuleId` ASC) ;

Если я брошу линию

  ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId` ) REFERENCES `Rules` (`RuleId` ) ON DELETE NO ...

это работает ,

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

Error Code : 1005
Can't create table '..' (errno: 121)

Как я могу добавить внешний ключ и индекс на одном поле ?

Обновлять:

Я стараюсь отсоединиться до 2 запросов, сначала добавьте индекс и после этого добавить внешний ключ, добавлен индекс, но второй запрос не работает!

Когда я изменил имя внешнего ключа (например: 'fk_2') и попробуйте запустить его, я получаю сообщение об ошибке: Код ошибки: 1452 Не удается добавить или обновить дочернюю строку: ограничение внешнего ключа

Это было полезно?

Решение

Сначала создайте индекс и вторым ограничением внешнего ключа. MySQL нужен индекс для создания внешнего ключа, поэтому вы должны сначала создать индекс. Используйте отдельные заявления также.

Другие советы

У меня была такая же проблема точно.

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

Ошибка 1005 (Hy000): не может создать таблицу './mydb/#sql-e4a_c715.frm' (errno: 121), как упомянуто выше, вы получите это сообщение, если вы пытаетесь добавить ограничение с именем, которое уже использовался где-то еще.

(Взято из здесь)

Так что просто переименуйте его на что-то случайное, чтобы проверить, правильно ли я ..

Я получил эту ошибку после объединения Schema DDLS из приложений N Django с помощью команды «Manage.py SQLALL».

Я обнаружил, что DDL MySQL требует, чтобы утверждения были сгруппированы Добрый в этом порядке. В частности, все альтернативы ... Добавить ... Зарубежный ключ ... должен происходят последним, или MySQL поднимет эту ошибку.

  1. Создать стол ...
  2. Создать индекс ...
  3. Alter table table_name Добавьте название ограничения Иностранные ключ ...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top