par
Augure » 07 oct. 2005, 15:27
Un peu de théorie, définition d’une transaction : Séquence d'instructions SQL qui définit une unité de travail logique. Une transaction est traitée dans son intégralité ou pas du tout. La transaction se termine soit par une instruction COMMIT, qui rend TOUTES les modifications apportées aux données permanentes, soit par une instruction ROLLBACK, qui annule TOUTES les modifications effectuées pendant la transaction.
Concrétement
Dans une session (c’est à dire une connexion; une transaction est propre à une connexion. Si l’utilisateur A ouvre une transaction, l’utilisateur B ne pourra pas la terminer pour lui.) tu créé une transaction. Ensuite tu envoies des ordres SQL. Puis tu termines avec l’instruction COMMIT pour tout valider ou ROLLBACK pour tou annuler.
$req_tmp = mysql_query(‘START TRANSACTION;’);
// Test $req_tmp si ok
$req_tmp = mysql_query(‘INSERT ….’);
// Test $req_tmp si ok
$req_tmp = mysql_query(‘INSERT ….’);
// Test $req_tmp si ok
$req_tmp = mysql_query(‘INSERT ….’);
// Test $req_tmp si ok
// si tout est OK
mysql_query(‘COMMIT’);
// si un KO
mysql_query(‘ROLLBACK’);
Exemple concret
Lors d’un virement d’un compte A vers un compte B. Il faut que les deux ordres soit validé ensemble ou annulé ensemble. Il ne faut pas qu’un seul ordre sur les deux soit passé et pas l’autre (sinon toi ou ton banquier rallerez)
$req_tmp = mysql_query(‘START TRANSACTION;’);
// Test $req_tmp si ok
$req_tmp = mysql_query(‘UPDATE compte set mt=mt-100 WHERE id_compte=’A’; ’);
// Test $req_tmp si ok
$req_tmp = mysql_query(‘UPDATE compte set mt=mt+100 WHERE id_compte=’B’; ’);
// Test $req_tmp si ok
// si tout est OK
mysql_query(‘COMMIT’);
// si un KO
mysql_query(‘ROLLBACK’);
En éspérant que cela éclaire un peu ta lanterne
Un peu de théorie, définition d’une transaction : Séquence d'instructions SQL qui définit une unité de travail logique. Une transaction est traitée dans son intégralité ou pas du tout. La transaction se termine soit par une instruction COMMIT, qui rend TOUTES les modifications apportées aux données permanentes, soit par une instruction ROLLBACK, qui annule TOUTES les modifications effectuées pendant la transaction.
Concrétement
Dans une session (c’est à dire une connexion; une transaction est propre à une connexion. Si l’utilisateur A ouvre une transaction, l’utilisateur B ne pourra pas la terminer pour lui.) tu créé une transaction. Ensuite tu envoies des ordres SQL. Puis tu termines avec l’instruction COMMIT pour tout valider ou ROLLBACK pour tou annuler.
[php]$req_tmp = mysql_query(‘START TRANSACTION;’);
// Test $req_tmp si ok
$req_tmp = mysql_query(‘INSERT ….’);
// Test $req_tmp si ok
$req_tmp = mysql_query(‘INSERT ….’);
// Test $req_tmp si ok
$req_tmp = mysql_query(‘INSERT ….’);
// Test $req_tmp si ok
// si tout est OK
mysql_query(‘COMMIT’);
// si un KO
mysql_query(‘ROLLBACK’);[/php]
Exemple concret
Lors d’un virement d’un compte A vers un compte B. Il faut que les deux ordres soit validé ensemble ou annulé ensemble. Il ne faut pas qu’un seul ordre sur les deux soit passé et pas l’autre (sinon toi ou ton banquier rallerez)
[php]$req_tmp = mysql_query(‘START TRANSACTION;’);
// Test $req_tmp si ok
$req_tmp = mysql_query(‘UPDATE compte set mt=mt-100 WHERE id_compte=’A’; ’);
// Test $req_tmp si ok
$req_tmp = mysql_query(‘UPDATE compte set mt=mt+100 WHERE id_compte=’B’; ’);
// Test $req_tmp si ok
// si tout est OK
mysql_query(‘COMMIT’);
// si un KO
mysql_query(‘ROLLBACK’);[/php]
En éspérant que cela éclaire un peu ta lanterne