Košík je prázdný

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.