View Full Version : [MySQL] Come implemento le transazioni?!
Matrixbob
21-06-2005, 09:16
Mi han detto che è 1 cavolata, metti un comando prima di manipolare le tabelle e poi 1 commit ed 1 rollback a seconda del caso.
Tutto qui?! :confused:
In mysql non lo so ma ti posso dire che per esempio oracle non rende definitiva un'azione fino a quando non esegui un commit, e se hai sbagliato puoi eseguire un semplice rollback.
Quindi presumibilmente in mysql è molto simile.....
Ciao
beppegrillo
21-06-2005, 16:14
Mi han detto che è 1 cavolata, metti un comando prima di manipolare le tabelle e poi 1 commit ed 1 roolback a seconda del caso.
Tutto qui?! :confused:
begin transaction
blah blah
commit work;
end transaction
maulattu
21-06-2005, 16:36
begin transaction
blah blah
commit work;
end transaction
se invece usi (x es.) java con le librerie mysql:
con.setAutocommit(false); // con è un oggetto di tipo Connection)
// fai tutto quel che vuoi col db
con.commit(); //se tutto ok
// altrimenti scrivi: con.rollback();
:D
Matrixbob
21-06-2005, 16:50
begin transaction
blah blah
commit work;
end transaction
Cioè le "parole chiave" qui sono:
1] begin transaction
2] commit work;
3] end transaction
4] ma per fare il rollback in caso che la modifica su una tabella è andata storta?!
... conviene sempre usarle le transazioni?! o quando?!
Matrixbob
21-06-2005, 16:52
se invece usi (x es.) java con le librerie mysql:
con.setAutocommit(false); // con è un oggetto di tipo Connection)
// fai tutto quel che vuoi col db
con.commit(); //se tutto ok
// altrimenti scrivi: con.rollback();
:D
Giusto, dovrei fare una parte anche in tecnologia JAVA e quindi Serlvelt o JSP, qui invece come funzionano le transazioni?!
http://dev.mysql.com/doc/mysql/en/commit.html
Matrixbob
21-06-2005, 17:41
http://dev.mysql.com/doc/mysql/en/commit.html
Mi mancava Cionci!! :)
Sai mica come faccio questo:
SET AUTOCOMMIT=0; ?!
Lo invii come se fosse una query...ovviamente come prima istruzioen della connessione che stai usando...ma controllane prima il valore, magari è già a zero...
Matrixbob
21-06-2005, 18:52
Lo invii come se fosse una query...ovviamente come prima istruzioen della connessione che stai usando...ma controllane prima il valore, magari è già a zero...
// connessione al DB ?!
$sqlquery = "SET AUTOCOMMIT=0";
$queryresult = mysql_query($sqlquery, $connessione) or die(errore());
// altre istruzioni o disconnessione quindi?!
Così?!
Matrixbob
21-06-2005, 18:58
Sì...
Mi sento imbecille :fagiano:, e per vedere come hai detto tu se è settato ti ricordi mica come si fa invece?!
http://dev.mysql.com/doc/mysql/en/set-option.html
Matrixbob
23-06-2005, 11:00
http://dev.mysql.com/doc/mysql/en/set-option.html
Anzitutto, ma quando vanno usate le transazioni?!
Quando processi in concorrenza vogliono scrivere nel db?!
Quindi ad esempio per la prenotazione di posti x 1 qualche evento?!
Quindi non quando un utente si iscrive al sito, giusto?!
Adesso provo a tradurmi quell'inglese, ma mi sa mio malgrado che dovrò chiedere ancora a voi, non me la cavo benissmo con le lingue ... :(
Le transazioni servono per un accesso concorrente quando dovresti altrimenti bloccare un macello di tabelle...
MySQL offre anche una politica di locking con le istruzioni LOCK e UNLOCK...
maulattu
23-06-2005, 12:50
ci sono anche diverse modalità per la loro gestione, tipo read-committed ed altre che troverai sul sito.
quella più sicura (ma anche drastica) è serialized, cioè permette UN UNICO COMPITO PER VOLTA...nella maggior parte dei casi è molto restrittiva...
Comunque leggi bene quel capitolo... Con START TRANSACTION, AUTOCOMMIT è implicitamente settato a 0...
Matrixbob
23-06-2005, 13:33
Comunque leggi bene quel capitolo... Con START TRANSACTION, AUTOCOMMIT è implicitamente settato a 0...
Quindi una volta che uso quelle istruzioni lui si autosetta a 0?!
Non ho capito na mazza?!
... ho letto alla veloce perchè sto pensando a come mandare in esecuzione 10 quesri che deve fare il gestore del sito ... :(
Quindi una volta che uso quelle istruzioni lui si autosetta a 0?!
Sì...la START TRANSACTION imposta atomaticamente autocommit a 0 fino al prossimo COMMIT o ROLLBACK...
Matrixbob
18-07-2005, 20:06
Sì...la START TRANSACTION imposta atomaticamente autocommit a 0 fino al prossimo COMMIT o ROLLBACK...
Secondo voi è possibile mantenere la transazione aperta anche passando da pagina in pagina?! Forse se non chiudo la connessione al DBMS c'è la fa.
Purtroppo solo stasera o domani proverò quanto detto in questo 3D.
CMQ me lo tengo stretto mitico cionci. :)
Matrixbob
19-07-2005, 13:46
Alla fine mi sono arrangiato come segue: va bene secondo voi?!
PHP e MySQL sembrano non dare errori.
<?php
$START_TRANSACTION = "START TRANSACTION";
$COMMIT = "COMMIT";
$ROLLBACK = "ROLLBACK";
//inizio le operazioni atomiche
mysql_query($START_TRANSACTION) or die(errore());
[ queryresult5 ]
[ queryresult6 ]
[ queryresult7 ]
//finisco le operazioni atomiche
if ($queryresult5 && $queryresult6 && $queryresult7) {
mysql_query($COMMIT) or die(errore());
print("<font color=\"green\">COMMIT!</font><br /><br />\n");
}
else {
mysql_query($ROLLBACK) or die(errore());
print("<font color=\"red\">ROLLBACK!</font><br /><br />\n");
}
?>
... Cionci ... :rolleyes: ... :stordita:
Tenendo presente la condizione che prendo per vera:
"... con START TRANSACTION l'autocommit si setta a 0 fino al COMMIT/ROLLBACK da solo".
Intuita qui:
http://dev.mysql.com/doc/mysql/en/commit.html
Ad occhio mi sembra di sì...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.