La risposta alla tua domanda dipende dal fatto che tu sia o meno all'interno di una transazione che si estenderà su più di una dichiarazione. (Hai taggato la domanda con InnoDB, la risposta sarebbe diversa con MyISAM.)
Dal manuale di riferimento: http://dev.mysql.com/doc/refman/5.1/en/commit.html
Per impostazione predefinita, MySQL funziona con la modalità autocommit abilitata. Ciò significa che non appena si esegue un'istruzione che aggiorna (modifica) una tabella, MySQL memorizza l'aggiornamento su disco per renderlo permanente.
Quindi sì, per impostazione predefinita, se stai solo usando INSERT
, i record che inserisci saranno sottoposti a commit e non ha senso provare a ripristinarli. (Questo è effettivamente lo stesso che avvolge ogni istruzione tra BEGIN
e COMMIT
.)
Tuttavia, se hai a che fare con transazioni esplicite, dovrai utilizzare COMMIT
per eseguire l'archiviazione dei record, ma sarai anche in grado di utilizzare ROLLBACK
.
È possibile avviare una transazione in modo esplicito utilizzando START TRANSACTION
(o BEGIN
). Questo è indipendente autocommit
dall'impostazione (attivata per impostazione predefinita):
Con START TRANSACTION, autocommit rimane disabilitato fino al termine della transazione con COMMIT o ROLLBACK. La modalità autocommit torna quindi al suo stato precedente.
In alternativa, se autocommit=0
, penso che qualsiasi dichiarazione che segue un'altra fine della transazione, avvierà una transazione (ma puoi comunque utilizzarla START TRANSACTION
esplicitamente); questo è almeno il modo in cui lo interpreto :
La modalità autocommit. Se impostato su 1, tutte le modifiche a una tabella hanno effetto immediato. Se impostato su 0, è necessario utilizzare COMMIT per accettare una transazione o ROLLBACK per annullarla. Se autocommit è 0 e lo si modifica in 1, MySQL esegue un COMMIT automatico per qualsiasi transazione aperta. Un altro modo per iniziare una transazione è usare un'istruzione START TRANSACTION o BEGIN. Vedere la Sezione 12.3.1, "INIZIA TRANSAZIONE, COMMIT e sintassi ROLLBACK".
Più specificamente "un altro modo per iniziare una transazione" sembra implicare che l'impostazione "autocommit = 0" è sufficiente per avviare una transazione (almeno appena prima di ogni istruzione all'inizio di una sessione o che segue un COMMIT
/ ROLLBACK
). Suggerirei di utilizzare esplicitamente BEGIN
o START TRANSACTION
comunque anche se autocommit=0
, in quanto può rendere più chiaro vedere quando inizia o termina la transazione.
(Il modo in cui si avvia una transazione può dipendere dal modo in cui l'applicazione utilizza MySQL.)