Transakce
Transakce zaručují, že se buď provedou všechny operace v rámci transakce, nebo se neprovede žádná. Jsou užitečné pro zajištění konzistence dat při složitějších operacích.
Základní použití
Nejjednodušší způsob použití transakcí vypadá takto:
Mnohem elegantněji můžete to samé zapsat pomocí metody transaction()
:
Metoda transaction()
může také vracet hodnoty:
Zanořené transakce
Nette Database podporuje zanořování transakcí pomocí SQL savepointů. To znamená, že můžete spustit transakci uvnitř jiné transakce. Zde je jednoduchý příklad:
Podkladový mechanismus využívá ve skutečnosti jen jednu transakci na úrovni databáze a vnořené transakce emuluje pomocí savepointů. Toto chování je stejné pro všechny databáze a je zcela transparentní.
Auto-commit režim
Auto-commit určuje, zda se každý dotaz automaticky provede v samostatné transakci. Ve výchozím nastavení je auto-commit zapnutý, což znamená, že každý dotaz tvoří samostatnou transakci.
Auto-commit můžete vypnout v konfiguraci:
nebo v kódu:
Při vypnutém auto-commitu se automaticky spustí nová transakce v těchto případech:
- při připojení k databázi
- po dokončení předchozí transakce (commit nebo rollback)
Pokud změníte nastavení auto-commitu během aktivní transakce, transakce se automaticky potvrdí.