Como deletar um registro quando duas tabelas possuem chaves estrangeiras referenciadas umas às outras? [fechadas]

3

Excluir qualquer registro deles relatará um erro como este:

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails

Como superar esse problema?

    
por vps 27.02.2010 / 11:46

2 respostas

2

Você já tentou:

UPDATE table1 SET reference=NULL;
DELETE FROM table2 WHERE id=1;
DELETE FROM table1 WHERE id=1;

Ao limpar a referência, a restrição FK não deve mais ser um problema.

    
por 27.02.2010 / 12:03
1

Você tem duas opções. Uma é limpar a referência, como Gorilla apontou em seu post. Você faz isso definindo a referência como nula ou algo semelhante e, em seguida, exclua as postagens na ordem correta, mas isso não é o que você normalmente deseja fazer.

Em vez disso, você provavelmente deseja fazer uma exclusão em cascata, mas seu esquema não está configurado corretamente para isso. A exclusão em cascata significa que as postagens que fizerem referência à postagem que você tentar excluir também serão removidas.

A sintaxe para configurar uma tabela para dar suporte a cascatas é semelhante a esta:

CREATE TABLE car(
        car_id serial PRIMARY KEY,
        owner_id integer NOT NULL REFERENCES owner ON DELETE CASCADE);

Se você configurar suas tabelas como essa, a exclusão da postagem original (um proprietário no exemplo) resultará na exclusão de todas as referências de postagens (carros no exemplo). Você evitará ter que limpar as referências e remover todas as postagens manualmente.

Dependendo do tipo de banco de dados, você usa um comando ALTER TABLE para introduzir a exclusão em cascata em seu esquema.

    
por 27.02.2010 / 22:58