En primer lugar te recomiendo que abras dos hilos distintos para dos preguntas distintas, tal como se recomienda en la
guia de estilo.
La solucion natural para evitar el problema de duplicidad de clave es el uso de generadores, secuencias o como lo llame tu base de datos, que es un mecanismo independiente de la transaccion que te asegura un numero diferente para cada registro. Lamentablemente no te puedo orientar mas ya que no indicas en que base de datos trabajas.
Para tu problema de guardar todo o nada (tecnicamente una operacion atomica) la mejor solucion es valerse de una transaccion, y si algo falla en el transcurso de la actualizacion, hacer un rollback, de lo contrario un commit, y listo.
Hasta luego.