3
respostas

ERROR 1452 - a foreign key constraint fails

Bom dia, ao tentar adicionar a chave estrangeira está gerando este erro. Segue abaixo todo o código:

Estrutura das tabelas compras e compradores

compras

+--------------+------------------------------------+------+-----+---------+----------------+   
| Field        | Type                               | Null | Key | Default | Extra          |   
+--------------+------------------------------------+------+-----+---------+----------------+   
| id           | int(11)                            | NO   | PRI | NULL    | auto_increment |   
| valor        | double                             | YES  |     | NULL    |                |   
| data         | date                               | YES  |     | NULL    |                |   
| observacoes  | text                               | NO   |     | NULL    |                |   
| recebido     | tinyint(1)                         | YES  |     | 1       |                |   
| forma_pagt   | enum('boleto','dinheiro','cartao') | YES  |     | NULL    |                |   
| comprador_id | int(11)                            | NO   |     | NULL    |                |   
+--------------+------------------------------------+------+-----+---------+----------------+   
7 rows in set (0.00 sec)

compradores

+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| nome     | varchar(100) | NO   |     | NULL    |                |
| endereco | varchar(100) | NO   |     | NULL    |                |
| telefone | varchar(20)  | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

Query SQL

 alter table compras add foreign key(comprador_id) references compradores(id);
3 respostas

Bom dia Claudio, meu chute é que precisa primeiro adicionar o campo comprador_id na tabela compradores e depois add como foreign key

Boa tarde Guilherme, pensei que a relação entre as duas tabelas se dava entre comprador_ id de compras e id da tabela compradores. Pelo menos quando faço o join funciona, só não funciona na hora do foreign key.

Olhando a estrutura das tabelas, não parece estar errado o comando da chave estrangeira, já que os campos que vão ser usados precisam ser do mesmo tipo, e 1 deles já é a chave primaria (o campo id da tabela compradores)

O que pode estar acontecendo é o seguinte, se a tabela de compras, que vai receber a chave estrangeira, já está com dados, pode ocorrer de algum dado no campo comprador_id não ser compatível com a regra, ou seja, o id informado no campo não existir na tabela de compradores. Neste caso, vai dar erro ao tentar adicionar a chave estrangeira.

Neste caso, bastaria apagar o registro com problema ou alterar o seu conteúdo.