Per rispondere alla domanda specifica, non penso che ci sia un modo per impostare una transazione nel database senso che farà quello che vuoi. Pensaci e vedrai perché: non c'è alcuna garanzia che le varie parti della tua operazione su più pagine vengano gestite con lo stesso processo. O probabilmente anche lo stesso server. Se la richiesta si estende su connessioni al database, come in questa situazione, le parti non vincolate da una connessione saranno invisibili alle altre connessioni.
Così come le idee già menzionate, prenderei in considerazione l'utilizzo di una o più tabelle di "staging" per contenere i dati incompleti già inseriti. Quindi, quando l'utente ha terminato, una singola transazione può applicare i dati alle tabelle permanenti e rimuovere i dati di staging. I dati incompleti possono essere cancellati su un criterio di età mediante un processo in background una volta che si è certi che la sessione è stata interrotta o mantenuta fino a quando l'utente non ritorna, nel caso ciò risponda meglio alle proprie esigenze.
Mi piacerebbe attenermi a questo approccio in particolare se mi aspetto di avere regolari transazioni incomplete, perché in questo modo non devo gestire dati incompleti nei miei modelli principali.
fonte
2009-03-30 22:46:25