MySQL - 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, solitamente indicate con l'acronimo ACID -

  • Atomicity- Ciò garantisce 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 - Ciò garantisce che il database modifichi correttamente gli stati in seguito a una transazione confermata con successo.

  • Isolation - Ciò consente alle transazioni di operare in modo indipendente e trasparente l'una con l'altra.

  • Durability - Ciò garantisce 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 terminare con a COMMIT o a ROLLBACKdichiarazione. I comandi SQL 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 SET AUTOCOMMIT = 0 comando, la serie successiva di istruzioni agisce come una transazione e nessuna attività viene sottoposta a commit finché non viene emessa un'istruzione COMMIT esplicita.

È possibile eseguire questi comandi SQL in PHP utilizzando il mysql_query() funzione.

Un 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.

È possibile eseguire questi comandi SQL in PHP utilizzando il mysql_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 un comando ROLLBACK, altrimenti eseguire un comando COMMIT.

Tipi di tabelle a prova di transazione in MySQL

Non è possibile utilizzare le transazioni direttamente, ma per alcune eccezioni è possibile. Tuttavia, non sono sicuri e garantiti. Se prevedi di utilizzare le transazioni nella tua programmazione MySQL, 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 MySQL dal sorgente. Se la tua versione di MySQL non supporta InnoDB, chiedi al tuo provider di servizi Internet di creare una versione di MySQL con supporto per i tipi di tabella InnoDB o scarica e installa ilMySQL-Max Binary Distribution per Windows o Linux / UNIX e lavorare con il tipo di tabella in un ambiente di sviluppo.

Se l'installazione di MySQL supporta le tabelle InnoDB, aggiungi semplicemente un file TYPE = InnoDB definizione all'istruzione di creazione della tabella.

Ad esempio, il codice seguente crea una tabella InnoDB chiamata tcount_tbl -

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

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

Per maggiori dettagli su InnoDB, puoi fare clic sul seguente link - InnoDB

Puoi usare altri tipi di tabella come GEMINI o BDB, ma dipende dalla tua installazione, che supporti o meno questi due tipi di tabella.