Erro 1005 Ao adicionar uma restrição de chave estrangeira na tabela MySQL
-
26-09-2019 - |
Pergunta
Tenho um problema ao atualizar um aplicativo Django e MySQL com o Sul.
Eu tentei fazer uma atualização baseada em SQL com o código gerado pelo comando Django Sqlall e tenho um problema semelhante.
Aqui está o código 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`);
Um erro é levantado ao adicionar a restrição de FK:
ERROR 1005 (HY000): Can't create table 'apidev_mnl.#sql-106e_632b00a' (errno: 150)
Alguém tem uma ideia?
ATUALIZAÇÃO: Valores padrão onde ausentes, mas mesmo se eu adicionar o padrão = '' no modelo Django, a criação de chaves estrangeiras falha.
Obrigado pela ajuda
Solução 3
Finalmente resolvi o problema graças a uma solução alternativa. O alter funciona bem na minha máquina de dev enquanto falha no host. Não encontrei o motivo, mas consegui fazê -lo funcionar exportando, migrando para minha máquina de desenvolvimento e reimportando.
Outras dicas
Parece que você está tentando adicionar uma restrição com um símbolo/nome que já existe.
ALTER TABLE `programmations_concert` ADD CONSTRAINT `basis_support_id_refs_id_1e4ed8d7` FOREIGN KEY (`basis_support_id`) REFERENCES `programmations_basissupport` (`id`);
pode ser alterado para:
ALTER TABLE `programmations_concert` ADD FOREIGN KEY (`basis_support_id`) REFERENCES `programmations_basissupport` (`id`);
Havia o mesmo problema. E, finalmente, acho que no campo da tabela referenciado não era "não assinado", mas na tabela de referência - não não assinada.