Código de erro:1005 -- há uma referência de chave primária errada em seu código
Geralmente é devido a um campo de chave estrangeira referenciado que não existe. Pode ser que você tenha um erro de digitação ou verifique se deve ser o mesmo, ou há uma incompatibilidade de tipo de campo. Os campos vinculados a chave estrangeira devem corresponder exatamente às definições.
Algumas causas conhecidas podem ser:
- O tipo e/ou tamanho dos dois campos-chave não corresponde exatamente. Por exemplo, se um for
INT(10)o campo chave precisa serINT(10)também e nãoINT(11)ouTINYINT. Você pode querer confirmar o tamanho do campo usandoSHOWCREATETABLEporque o Query Browser às vezes mostrará visualmente apenasINTEGERpara ambosINT(10)eINT(11). Você também deve verificar se não estáSIGNEDe o outro éUNSIGNED. Ambos precisam ser exatamente iguais. - Um dos campos de chave que você está tentando fazer referência não tem um índice e/ou não é uma chave primária. Se um dos campos do relacionamento não for uma chave primária, você deverá criar um índice para esse campo.
- O nome da chave estrangeira é uma duplicata de uma chave já existente. Verifique se o nome de sua chave estrangeira é exclusivo em seu banco de dados. Basta adicionar alguns caracteres aleatórios ao final do nome da chave para testar isso.
- Uma ou ambas as suas tabelas são
MyISAMtabela. Para usar chaves estrangeiras, as tabelas devem serInnoDB. (Na verdade, se ambas as tabelas foremMyISAMentão você não receberá uma mensagem de erro - ele simplesmente não criará a chave.) No Query Browser, você pode especificar o tipo de tabela. - Você especificou uma cascata
ONDELETESETNULL, mas o campo-chave relevante é definido comoNOTNULL. Você pode corrigir isso alterando sua cascata ou configurando o campo para permitirNULLvalores. - Certifique-se de que as opções Charset e Collate sejam as mesmas tanto no nível da tabela quanto no nível do campo individual para as colunas-chave.
- Você tem um valor padrão (ou seja, default=0) em sua coluna de chave estrangeira
- Um dos campos no relacionamento faz parte de uma chave de combinação (composta) e não possui seu próprio índice individual. Mesmo que o campo tenha um índice como parte da chave composta, você deve criar um índice separado apenas para esse campo de chave para usá-lo em uma restrição.
- Você tem um erro de sintaxe em seu
ALTERou você digitou incorretamente um dos nomes de campo no relacionamento - O nome da sua chave estrangeira excede o comprimento máximo de 64 caracteres.
Para obter mais detalhes, consulte:Erro MySQL número 1005 Não é possível criar tabela