MySQL ALTER TABLE - Добавить индекс + внешний ключ Дайте ошибку 1005
-
27-09-2019 - |
Вопрос
Что не так с этой командой 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 поднимет эту ошибку.
- Создать стол ...
- Создать индекс ...
- Alter table table_name Добавьте название ограничения Иностранные ключ ...