Ошибка 1005 при добавлении ограничения внешнего ключа в таблицу mysql - PullRequest
2 голосов
/ 12 мая 2010

У меня проблема при обновлении приложения django и mysql с юга.

Я попытался выполнить обновление на основе SQL с помощью кода, сгенерированного командой django sqlall, и у меня возникла похожая проблема.

Вот код sql:

CREATE TABLE `programmations_basissupport` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `value` numeric(6, 0) NOT NULL
)

ALTER TABLE `programmations_concert` ADD `basis_support_id` integer AFTER program_status_id;

ALTER TABLE `programmations_concert` ADD CONSTRAINT `basis_support_id_refs_id_1e4ed8d7` FOREIGN KEY (`basis_support_id`) REFERENCES `programmations_basissupport` (`id`);

При добавлении ограничения FK возникает ошибка:

ERROR 1005 (HY000): Can't create table 'apidev_mnl.#sql-106e_632b00a' (errno: 150)

У кого-нибудь есть идея?

Обновление: значения DEFAULT там, где их нет, но даже если я добавлю default = '' в модели django, создание внешних ключей завершится неудачно.

Спасибо за вашу помощь

Ответы [ 3 ]

3 голосов
/ 07 октября 2010

Похоже, вы пытаетесь добавить ограничение с уже существующим символом / именем.

ALTER TABLE `programmations_concert` ADD CONSTRAINT `basis_support_id_refs_id_1e4ed8d7` FOREIGN KEY (`basis_support_id`) REFERENCES `programmations_basissupport` (`id`);

можно изменить на:

ALTER TABLE `programmations_concert` ADD FOREIGN KEY (`basis_support_id`) REFERENCES `programmations_basissupport` (`id`);
2 голосов
/ 10 июня 2010

Была такая же проблема. И, наконец, я обнаружил, что в ссылочной таблице поле было "без знака", но в ссылочной таблице - не без знака.

1 голос
/ 27 мая 2010

Я наконец исправил проблему благодаря обходному пути. Alter работает нормально на моей машине разработчика, в то время как он не работает на хосте. Я не нашел причину, но мне удалось заставить ее работать, экспортировав, перенеся на мою машину разработчика и повторно импортировав.

...