Il sito dedicato all'informatica ideato da Iasparra Francesco

Le transazioni con MySql

  • Come gestire le transazioni in PHP con MySql

  • Data: 09/05/2016 Autore: Iasparra Francesco 

Le transazioni permettono di rendere persistenti le modifiche sulla base dati in un momento ben preciso: dall'avvio di una transazione, gli aggiornamenti rimangono sospesi fino a quando non li confermiamo attravero l'operazione di COMMIT o in alternativa annullare le modifiche con l'operazione di ROLLBACK.

MySQL di default funziona in autocommit mode: questo significa che tutti gli aggiornamenti vengono automaticamente consolidati nel momento in cui sono eseguiti.

Per iniziare una transazione dobbiamo usare l’istruzione START TRANSACTION e da questo momento in poi tutti gli aggiornamenti rimarranno sospesi fino alla chiusa con l’istruzione COMMIT, che rende persistente le modifiche in una operazione atomica.

Con l’istruzione SET AUTOCOMMIT=0 possiamo disattivare l’autocommit e non e' piu' necessario avviare le transazioni con START TRANSACTION, e tutti gli aggiornamenti necessiteranno dell’uso di COMMIT o ROLLBACK.

Esempio:
try{
    mysql_query("SET AUTOCOMMIT=0");
    mysql_query("START TRANSACTION");
    if(!mysql_query('UPDATE utente SET codice_a_barre = \'11111111111\' WHERE  id =4 ')) throw new Exception('ERROR1');
    if(!mysql_query('UPDATE utente SET codice_a_barre = \'22222222222\' WHERE  id =3 ')) throw new Exception('ERROR2');
    if(!mysql_query('UPDATE utente SET codice_a_barre = \'33333333333\' WHERE  id =5 ')) throw new Exception('ERROR3');
    mysql_query("COMMIT");
    echo "OK";
}catch( Exception $e){
    mysql_query("ROLLBACK");
    echo "EXCEPTION: ".$e->getMessage();
}

In questo esempio vengono eseguite tre update in una sola operazione atomica. Se si dovesse verificare un problema in una solo operazione di UPDATE, allora nessuna operazione verrebbe realmente eseguita sulla base dati.


  • Java

  • Php

  • Mysql

  • Apache ant

  • Eclipse

  • Spring

  • Hibernate

  • Netbeans

  • Debian

  • Linux

  • Maven