Le Prepared Statements vengono utilizzateper ottimizzare l'esecuzione ripetuta di query aventi struttura simile. Esempio: se devo inserire n volte dei prodotti in un db, la query avrà sempre la stessa struttura (INSERT INTO blabla), quindi al DBMS conviene prepararsi ad eseguire quella query una volta per tutte, in modo da ottimizzarne i tempi sapendo che dovrà ripetere quella operazione molte volte.
Le Transaction (transazioni) sono invece utilizzate per implementare a livello logico delle operazioni che devono essere eseguite atomicamente. Se le operazioni che compongono la transazione venissero eseguite solo parzialmente, potrebbero generare dati inconsistenti.
Esempio: devo aumentare il conto corrente di un utente di 10 e poi prelevare 5; se la prima query andasse a buon fine ma la seconda no (per qualche malfunzionamento o errore interno), avrei dati che non rispecchiano la situazione che vorrei avere. Se una operazione compresa nella transazione non va a buon fine, l'intera transazione viene "annullata", eseguendo un'operazione detta "rollback" che riporta tutti i dati allo stato precedente. In questo modo l'operazione di aggiunta e prelievo vengono considerate inscindibili e "non interrompibili".
Le transazioni sono poi usate anche per risolvere problemi di mutua esclusione sulla lettura e scrittura di dati.
Dal punto di vista teorico le transazioni vengono descritte attraverso delle proprietà dette ACID (dal nome delle iniziali dei termini).
Quindi ti puoi accorgere da solo che vengono utilizzate per scenari molto diversi.