Quando você receber essa mensagem de erro vaga, poderá descobrir o erro mais específico executando
SHOW ENGINE INNODB STATUS;
Os motivos mais comuns são que, ao criar uma chave estrangeira, tanto o campo referenciado quanto o campo de chave estrangeira precisam corresponder:
- Motor deve ser o mesmo por exemplo InnoDB
- Tipo de dados devem ser iguais e com o mesmo comprimento.
ex. VARCHAR(20) ou INT(10) NÃO ASSINADO - Agrupamento deve ser o mesmo. por exemplo utf8
- Único - Chave estrangeira deve se referir ao campo que é único (geralmente privado) na tabela de referência.
Outra causa deste erro é:
Você definiu uma condição SET NULL embora algumas das colunas estejam definidas como NOT NULL.