Popis transakcí

Dokončeno

Transakce je jeden nebo více příkazů T-SQL, které jsou považovány za jednotku. Pokud jedna transakce selže, všechny příkazy selžou. Pokud je transakce úspěšná, víte, že všechny příkazy změny dat v transakci byly úspěšné a potvrzeny do databáze.

Transakce zajišťují, že všechna prohlášení v rámci transakce jsou buď úspěšná, nebo všechna selžou, a není povoleno žádné částečné dokončení. Transakce zapouzdřují operace, které je nezbytné provést společně, například více záznamů v souvisejících tabulkách, které jsou součástí jedné operace.

Představte si firmu, která ukládá nákupy v tabulce Sales.Order a platby v tabulce Sales.Payment . Když někdo něco koupí, obě tabulky musí být aktualizovány. Pokud je implementována bez transakcí a dojde k chybě při zápisu platby do databáze, bude vložení Sales.Order stále potvrzeno a ponechána platební tabulka bez položky.

Při implementaci s transakcemi se buď vytvoří obě položky, nebo se nevytvoří žádná položka. Pokud dojde k chybě při zápisu platby do tabulky, vložení objednávky se vrátí zpět. To znamená, že databáze je vždy v konzistentním stavu.

Diagram znázorňující rozdíl mezi použitím transakcí a nepoužitím transakcí.

Je třeba poznamenat, že se to týká závažných chyb, jako jsou chyby hardwaru nebo sítě. Chyby v příkazech SQL by způsobily vrácení transakce zpět pouze za určitých okolností a je důležité prostudovat následující oddíly tohoto modulu, abyste plně pochopili důsledky použití transakcí.

Existují různé typy transakcí:

Explicitní transakce

Klíčová slova BEGIN TRANSACTION a buď COMMIT nebo ROLLBACK zahajují a ukončují každou dávku příkazů. To umožňuje určit, které příkazy musí být potvrzeny nebo vráceny zpět společně.

Implicitní transakce

Transakce se spustí po dokončení předchozí transakce. Každá transakce je explicitně dokončena příkazem COMMIT nebo ROLLBACK.

Vlastnosti ACID

Systémy OLTP (Online Transactional Processing) vyžadují, aby transakce splňovaly vlastnosti ACID:

  • Atomicita – každá transakce je považována za jednu jednotku, která je zcela úspěšná nebo zcela selže. Například transakce, která zahrnovala inkasní prostředky z jednoho účtu a připisování stejné částky na jiný účet, musí dokončit obě akce. Pokud některou z akcí nejde dokončit, musí druhá akce selhat.
  • Konzistence – transakce mohou přijímat pouze data v databázi z jednoho platného stavu do druhého. Pokud chcete pokračovat ve výše uvedeném příkladu inkasa a úvěru, musí dokončený stav transakce odrážet převod finančních prostředků z jednoho účtu na druhý.
  • Izolace – souběžné transakce nemohou vzájemně kolidovat a musí mít za následek konzistentní stav databáze. Například zatímco transakce pro převod finančních prostředků z jednoho účtu do druhého je v procesu, jiná transakce, která kontroluje zůstatek těchto účtů, musí vrátit konzistentní výsledky – transakce kontroly zůstatku nemůže načíst hodnotu pro jeden účet, který odráží zůstatek před převodem, a hodnotu pro druhý účet, který odráží zůstatek po převodu.
  • Stálost – pokud byla transakce potvrzena, zůstane potvrzena. Po dokončení transakce převodu účtu se revidované zůstatky účtů zachovají, takže i v případě vypnutí databázového systému se potvrzená transakce projeví při opětovném zapnutí.