Hi tizule,
> partea de tranzactii ti ofera posibilitatea de a face un calup de
> modificari in baza de date si sa fii sigur ca ori se fac toate, ori nu
> se face nici unul
Da, exact asta ma intereseaza, dar nu pe toata baza de date, ci numai pe
anumite tabele. In prezent toata baza de date este de tip MyISAM.
> ideea e ca afaik baza de date nu stie si nu face (si de fapt daca te
> gandesti bine nu e treaba ei) sa faca commit/rollback la o tranzactie in
> functie de erorile tale la query-uri; acest lucru trebuie sa-l faci tu,
> facand in caz de succes un commit pe la sfarsitul scriptului, sau un
> rollback in caz de eroare;
Stii ce nu pricep eu? In documetatie ei spun asa:
By default, MySQL runs in autocommit mode. This means that as soon as you
execute an update, MySQL will store the update on disk. (EU NU VREAU ASA CEVA)
If you are using transactions safe tables (like InnoDB) you can put MySQL
into non-autocommit mode with the following command:
SET AUTOCOMMIT=0
DA, ASTA IMI PLACE. Deci eu cind o sa rulez scriptul trebuie sa pun
AUTOCOMMIT=0, corect?
After this you must use COMMIT to store your changes to disk or ROLLBACK if
you want to ignore the changes you have made since the beginning of your
transaction.
...
START TRANSACTION was added to MySQL 4.0.11; This is the recommended way to
start an ad-hoc transaction as this is SQL-99 syntax.
DA EXACT ASTA VREAU: AD-HOC TRANSATION.
Intrebare:
cum pot sa fiu sigur ca in cazul unui insert sau un update nereusit, se face
ROLLBACK la toate modificarile?
Ar fi corect sa fac ceva de genul:
mysql_query('SET AUTOCOMMIT=0');
mysql_query('START TRANSACTION');
#va rog sa ma corectati daca sintaxa de mai sus nu este corecta
while (conditia mea)
{
$insert = 'INSERT INTO table1 ... VALUES niste valori ...';
$result = mysql_query($insert1);
if ($result != true)
{
mysql_query('ROLLBACK');
break;
}
}
mysql_query('COMMIT');
mysql_query('SET AUTOCOMMIT=1');
Regards,
Alex
---
Detalii despre listele noastre de mail: http://www.lug.ro/