3
respostas

Add foreign key - Erro

Ao realizar o comando:

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

recebo o seguinte erro:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (controle_compras.#sql-e8c_2d, CONSTRAINT #sql-e8c_2d_ibfk_1 FOREIGN KEY (comprador_id) REFERENCES compradores (id))

Já verifiquei os tipos dos campos através dos comandos :

desc compradores;

Field | Type | Null | Key | Default | Extra

id | int(11) | NO | PRI | NULL | auto_increment

desc compras;

Field | Type | Null | Key | Default | Extra

id | int(11) | NO | PRI | NULL | auto_increment

3 respostas

oi Diogo

a tabela compras possui o campo comprador_id ?

sim

Field | Type | Null | Key | Default | Extra | +--------------+------------------------------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | valor | double | YES | | NULL | | | data | date | YES | | NULL | | | recebido | tinyint(1) | YES | | 0 | | | observacoes | varchar(255) | NO | | NULL | | | descricao | varchar(255) | YES | | NULL | | | forma_pagt | enum('Cartao','Boleto','Dinheiro') | YES | | NULL | | | comprador_id | int(11) | NO | | NULL | |

Bom dia Diogo,

Para que você possa definir esta coluna como chave estrangeira de outra tabela, como já existem dados populando a table Compras, você tem que garantir que todos registros de Compras tem um valor na coluna comprador_id que existe na tabela Compradores.id.

Ou seja, faça updates na tabela Compras para definir que a coluna comprador_id seja = 1 por exemplo, desde que na tabela Compradores exista um registro onde a coluna id é 1.

Ficou claro? Após garantir que não sobrou registro nenhum na tabela Compras cujo valor da coluna comprador_id é nulo ou aponta para um valor inexistente da coluna id de Compradores, pode rodar este comando de Foreign Key que dará certo. Qualquer coisa estamos ai.

Abraços.