Uma solução seria usar Transações , que permitem obter o comportamento "tudo ou nada".
A ideia é a seguinte :
- você inicia uma transação
- você faz suas inserções/atualizações
- se tudo estiver OK, você confirma a transação; que salvará tudo o que você fez durante esta transação
- se não, você reverte a transação; e tudo o que você fez nele será cancelado.
- se você não confirmar e desconectar (se seu script PHP morrer, por exemplo) , nada será confirmado, e o que você fez durante a transação não confirmada será revertido automaticamente.
Para mais informações, você pode dar uma olhada em 12.4.1. Sintaxe START TRANSACTION, COMMIT e ROLLBACK , para MySQL.
Observe que as transações estão disponíveis apenas para alguns mecanismos de banco de dados:
- MyISAM não suporta transações
- InnoDB faz (também suporta chaves estrangeiras, por exemplo -- é muito mais avançado que o MyISAM) .