SQL - databázové transakce (db transaction)
Databázové transakce se používají k tomu, aby byla zachována integrita databáze (konzistence dat). Cílem je, aby nenastala situace, kdy se provede pouze část sledu SQL dotazů, které spolu souvisí. Pokud tak nastane, tak aby došlo ke stornování všech změn.
Příklad SQL transakcí
Použití databázových transakcí je celkem jednoduché - před začátlem sledu SQL dotazů uvedeme START TRANSACTION, následují související SQL dotazy a na závěr uvedeme COMMIT takto:
START TRANSACTION;
INSERT INTO ....
UPDATE ....
COMMIT;
Transakci lze ukončit i příkazem ROLLBACK, který prove zrušení transakce.
Nette db transakce
Databázové transakce v Nette se dle dokumentace používají takto:
// zahajeni transakce
$db->beginTransaction();
// potvrzeni
$db->commit();
// vraceni zmen
$db->rollback();
Další možností je použití metody transaction() s callbackem
$insertId = $db->transaction(function ($db) {
$db->query('UPDATE ...');
$db->query('INSERT INTO ...');
// etc...
return $db->getInsertId();
});
Více v dokumentaci Nette ...
PS: Pokud používáte PDO, tak si přečtěte něco o PDO::beginTransaction