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 usandoSHOW
CREATE
TABLE
porque o Query Browser às vezes mostrará visualmente apenasINTEGER
para ambosINT(10)
eINT(11)
. Você também deve verificar se não estáSIGNED
e 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
MyISAM
tabela. Para usar chaves estrangeiras, as tabelas devem serInnoDB
. (Na verdade, se ambas as tabelas foremMyISAM
entã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
ON
DELETE
SET
NULL
, mas o campo-chave relevante é definido comoNOT
NULL
. Você pode corrigir isso alterando sua cascata ou configurando o campo para permitirNULL
valores. - 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
ALTER
ou 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