MySQLi - Transazioni

Una transazione è un gruppo sequenziale di operazioni di manipolazione del database, che viene eseguito come se fosse una singola unità di lavoro. In altre parole, una transazione non sarà mai completa a meno che ogni singola operazione all'interno del gruppo non abbia successo. Se qualsiasi operazione all'interno della transazione fallisce, l'intera transazione fallirà.

In pratica, raggrupperai molte query SQL in un gruppo e le eseguirai tutte insieme come parte di una transazione.

Proprietà delle transazioni

Le transazioni hanno le seguenti quattro proprietà standard, di solito indicate con l'acronimo ACID -

  • Atomicity- assicura che tutte le operazioni all'interno dell'unità di lavoro siano completate con successo; in caso contrario, la transazione viene interrotta al punto di errore e le operazioni precedenti vengono riportate al loro stato precedente.

  • Consistency - assicura che il database modifichi correttamente gli stati in caso di transazione confermata con successo.

  • Isolation - consente alle transazioni di operare in modo indipendente e trasparente tra loro.

  • Durability - assicura che il risultato o l'effetto di una transazione confermata persista in caso di guasto del sistema.

In MySQL, le transazioni iniziano con l'istruzione BEGIN WORK e terminano con un'istruzione COMMIT o ROLLBACK. I comandi SQLi tra le istruzioni di inizio e fine costituiscono la maggior parte della transazione.

COMMIT e ROLLBACK

Queste due parole chiave Commit e Rollback sono utilizzati principalmente per le transazioni MySQL.

  • Quando una transazione riuscita è completata, il comando COMMIT dovrebbe essere emesso in modo che le modifiche a tutte le tabelle coinvolte abbiano effetto.

  • Se si verifica un errore, è necessario eseguire un comando ROLLBACK per riportare ogni tabella a cui si fa riferimento nella transazione al suo stato precedente.

È possibile controllare il comportamento di una transazione impostando la variabile di sessione chiamata AUTOCOMMIT. Se AUTOCOMMIT è impostato su 1 (impostazione predefinita), ogni istruzione SQL (all'interno di una transazione o meno) viene considerata una transazione completa e sottoposta a commit per impostazione predefinita al termine. Quando AUTOCOMMIT è impostato su 0, emettendo il comando SET AUTOCOMMIT = 0, la serie successiva di istruzioni si comporta come una transazione e non viene eseguita alcuna attività finché non viene emessa un'istruzione COMMIT esplicita.

Puoi eseguire questi comandi SQL in PHP usando mysqli_query() funzione.

Esempio generico sulla transazione

Questa sequenza di eventi è indipendente dal linguaggio di programmazione utilizzato; il percorso logico può essere creato in qualsiasi lingua si utilizzi per creare l'applicazione.

Puoi eseguire questi comandi SQL in PHP usando mysqli_query() funzione.

  • Inizia la transazione immettendo il comando SQL BEGIN WORK.

  • Esegui uno o più comandi SQL come SELECT, INSERT, UPDATE o DELETE.

  • Controlla se non ci sono errori e tutto è conforme alle tue esigenze.

  • In caso di errori, eseguire il comando ROLLBACK, altrimenti eseguire un comando COMMIT.

Tipi di tabelle a prova di transazione in MySQLi

Non puoi usare le transazioni direttamente, puoi farlo ma non sarebbero sicure e garantite. Se prevedi di utilizzare le transazioni nella tua programmazione MySQLi, devi creare le tue tabelle in un modo speciale. Esistono molti tipi di tabelle che supportano le transazioni, ma la più popolare èInnoDB.

Il supporto per le tabelle InnoDB richiede un parametro di compilazione specifico durante la compilazione di MySQLi dal sorgente. Se la tua versione di MySQLi non supporta InnoDB, chiedi al tuo provider di servizi Internet di creare una versione di MySQLi con supporto per i tipi di tabella InnoDB o scarica e installa la distribuzione binaria MySQL-Max per Windows o Linux / UNIX e lavora con il tipo di tabella in un ambiente di sviluppo.

Se la tua installazione MySQLi supporta le tabelle InnoDB, aggiungi semplicemente un file TYPE = InnoDBdefinizione all'istruzione di creazione della tabella. Ad esempio, il codice seguente crea una tabella InnoDB chiamata tutorials_innodb -

[email protected]# mysql -u root -p;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_innodb
   -> (
   -> tutorial_author varchar(40) NOT NULL,
   -> tutorial_count  INT
   -> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.02 sec)

Controlla il seguente link per saperne di più su - InnoDB

Puoi usare altri tipi di tabella come GEMINI o BDB, ma dipende dalla tua installazione se supporta questi due tipi.