1
resposta

[Dúvida] Apagar linhas de duas tabelas com um único comando

Eu tenho uma tabela Player e uma Hero, na a chave estrangeira que liga as duas é a PlayerID que fica na Hero. Eu quero um comando pra apagar uma linha na Player usando um PlayerID e apagar todas as linhas na tabela Hero que também tenham esse PlayerID.

O jeito que eu tentei fazer de primeira sem saber foi assim:

"DELETE FROM player, hero WHERE PlayerID = ?"

Eu sei que tá errado, mas ajuda a entender o que eu queria fazer.

1 resposta

Considerando que o banco seja mysql, você pode fazer de duas formas:

1 - Se o campo playerID estiver configurado como chave estrangeira na tabela hero, você vai precisar setar na configuração da chave estrangeira, no parâmetro "on delete" = cascade, dessa forma, quando você excluir um registro da tabela pai (player) todos os registros da tabela filha (hero) vinculados à linha deletada, também serão deletados.

2 - Se não houver configuração de chave estrangeira você pode utilizar o seguinte comando:

delete hero, player
from hero inner join player on hero.player_id = player.id
where hero.player_id = id;

Muito cuidado com exclusões, não é aconselhável construir tabelas que tenham relacionamento, sem definição de chave estrangeira, isso pode gerar grandes problemas futuros, a medida que o banco de dados for crescendo.