Transakce jsou klíčovým konceptem v databázových systémech, které umožňují zajistit atomičnost, konzistenci, izolovanost a trvanlivost operací (tzv. ACID vlastnosti). V prostředí MySQL a jeho rozhraní mysqli v PHP lze transakce využít k zajištění integrity dat při provádění více vzájemně závislých databázových operací. V tomto článku probereme, jak v mysqli pracovat s transakcemi, od jejich zahájení až po potvrzení nebo zrušení.
Základy transakcí
Transakce je sekvence operací s databází, která je považována za jednu logickou jednotku práce. Pokud je jedna z operací v transakci neúspěšná, celá transakce může být vrácena zpět (rollback), což znamená, že žádná z operací v rámci transakce nebude mít trvalý efekt na databázi.
Inicializace a konfigurace mysqli
Pro použití mysqli transakcí je nejprve nutné vytvořit instanci mysqli a navázat spojení s databází. Je důležité, aby databáze podporovala transakce, což typicky znamená použití úložiště, jako je InnoDB pro MySQL.
$mysqli = new mysqli("host", "uzivatel", "heslo", "databaze");
if ($mysqli->connect_error) {
die("Nelze se připojit k databázi: " . $mysqli->connect_error);
}
Zahájení transakce
Transakci zahájíme vypnutím autocommitu, což znamená, že MySQL nevykona žádné změny v databázi, dokud explicitně nepožádáme o commit.
$mysqli->autocommit(FALSE);
Práce s transakcí
Nyní můžeme provádět databázové operace, jako jsou vložení, aktualizace nebo mazání. Tyto operace budou součástí naší transakce.
try {
$mysqli->query("INSERT INTO tabulka (sloupec) VALUES ('hodnota')");
$mysqli->query("UPDATE tabulka SET sloupec = 'nova_hodnota' WHERE podminka = 'splnena'");
// Další operace...
// Potvrzení transakce
$mysqli->commit();
} catch (Exception $e) {
// V případě chyby vrátíme změny zpět
$mysqli->rollback();
echo "Chyba transakce: " . $e->getMessage();
}
Ukončení transakce
Transakci ukončíme buď potvrzením, pokud vše proběhlo v pořádku, nebo vrácením změn (rollback), pokud došlo k chybě. Po dokončení transakce je dobrý nápad znovu zapnout autocommit.
$mysqli->autocommit(TRUE);
Použití transakcí v mysqli je zásadní pro zajištění integrity a konzistence dat při provádění komplexních operací, které zahrnují více kroků. Díky transakcím můžeme zajistit, že buď budou všechny operace úspěšně dokončeny, nebo nebude v databázi provedena žádná změna. Je to nezbytný nástroj pro každého vývojáře pracujícího s databázemi.