2010-05-12 1 views
2

У меня возникла проблема при обновлении приложения django и mysql с юга.Ошибка 1005 при добавлении ограничения внешнего ключа в таблице 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, где отсутствует, но даже если я добавлю по умолчанию значение '' в модели django, создание внешних ключей не удастся.

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

+0

проверить это сообщение - http://stackoverflow.com/questions/34579/mysql-error-1005-when-adding-tables – 0x2D9A3

+0

Спасибо. Я думал о несоответствии типа, но оба они являются целыми (11). SHOW ENGINE INNODB STATUS возвращает ошибку «Доступ запрещен: вам нужна привилегия PROCESS для этой операции» – luc

+0

Вам нужно запустить SHOW ENGINE INNODB STATUS в качестве более привилегированной учетной записи, такой как пользователь root mysql, или предоставить привилегию PROCESS учетную запись, которую вы используете. –

ответ

1

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

+0

Вы помните, какое обходное решение было? – Brian

2

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

3

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

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`); 
+0

Спасибо за ответ. Теперь это pb далека благодаря обходному решению, которое я предложил. Я проверю ваше предложение, если pb снова появится. Лучший – luc