START TRANSACTION
Sintassi:
START TRANSACTION [WITH CONSISTENT SNAPSHOT] | BEGIN [WORK] COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE] ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE] SET autocommit = {0 | 1}
Spiegazione:
L'istruzione START TRANSACTION
, o BEGIN
, fa iniziare una transazione. COMMIT
esegue la transazione corrente, rendendo permanenti le modifiche. ROLLBACK
annulla la transazione corrente, cancellando le modifiche. L'istruzione SET
autocommit disabilita o abilita la modalità di autocommit predefinita per la sessione corrente.
La parola chiave opzionale WORK
è supportata in COMMIT
e ROLLBACK
, così come CHAIN
e RELEASE
. CHAIN
e RELEASE
servono ad avere un maggiore controllo sul completamento della transazione. Il valore della variabile di sistema completion_type determina il comportamento predefinito del completamento. Si veda variabili di sistema del server.
La clausola AND CHAIN
fa sì che, appena la transazione corrente termina, ne inizi una nuova, che abbia lo stesso livello di isolamento. La clausola RELEASE
fa sì che il server disconnetta la sessione corrente al termine della transazione corrente. Specificando la parola chiave NO
si sopprime CHAIN
o RELEASE
; questo può essere utile se la variabile completion_type è impostata per il concatenamento delle transazioni, o per terminare la sessione per default.
Per default, la modalità di autocommit è abilitata. Questo significa che appena si esegue un'istruzione che aggiorna (modifica) una tabella, MariaDB registra i cambiamenti su disco in modo permanente. Per disabilitare l'autocommit si può eseguire la seguente istruzione:
SET autocommit=0;
Dopo aver disabilitato l'autocommit impostando la variabile autocommit a zero, le modifiche alle tabelle che supportano le transazioni (come quelle di tipo InnoDB o NDBCLUSTER
) non vengono più rese permanenti immediatamente. Occorre eseguire COMMIT
per registrare le modifiche su disco, o ROLLBACK
per annullarle.
Per disabilitare la modalità autocommit per una singola serie di comandi, si può utilizzare l'istruzione START TRANSACTION
.
Le transazioni non possono essere utilizzare all'interno delle Stored Function e dei Trigger. Nelle Stored Procedure START TRANSACTION
non è consentito, pertanto occorre utilizzare BEGIN
.
Esempi:
START TRANSACTION; SELECT @A:=SUM(salario) FROM tabella1 WHERE tipo=1; UPDATE tabella2 SET sommario=@A WHERE tipo=1; COMMIT;