Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Deletar um registro pai contendo uma fk relacionada

criei essas duas tabelas para testar relação de FK

CREATE TABLE pai ( id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=INNODB;

CREATE TABLE filho ( id INT, pai_id INT, INDEX pai_ind (pai_id), FOREIGN KEY (pai_id) REFERENCES pai(id) ) ENGINE=INNODB;

inseri dois registros em cada tabela:

insert into `pai` (`id`) values(1);

insert into `pai` (`id`) values(2);

insert into `child` (`id`,`parent_id`) values(1,1);

insert into `child` (`id`,`parent_id`) values(2,2);

delete from parent where id = 1;

ai quando deleto o registro da tabela pai ele não deveria deixar mas ele deleta normalmente, estou fazendo algo de errado?

5 respostas

corrigindo :

insert into `filho` (`id`,`pai_id`) values(1,1);

insert into `filho` (`id`,`pai_id`) values(2,2);

delete from pai where id = 1;

corrigindo :

insert into `filho` (`id`,`pai_id`) values(1,1);

insert into `filho` (`id`,`pai_id`) values(2,2);

delete from pai where id = 1;

solução!

Realmente se vc tentar excluir o registro do pai, o mysql não deve permitir fazer essa exclusão. Dropa essas tabelas e recria elas exatamente como você citou. Eu fiz aqui e o mysql não permitiu a exclusão.

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`loja`.`filho`, CONSTRAINT `filho_ibfk_1` FOREIGN KEY (`pai_id`) REFERENCES `pai` (`id`))

Dropei e criei de novo, agora funcionou, muito obrigado Thiago

Quando for assim ou você deleta o registro filho primeiro ou cria a constraint como ON DELETE CASCADE que quando você remove o registro pai, os registros "filhos" são removidos automaticamente.