Množina příkazů (operací), které jsou vedeny jako jeden celek.

Databázová transakce je jednotka, která převede databázi z jednoho konzistentního stavu do jiného konzistentního stavu.

Konzistentní stav znamená dodržení všech pravidel integritních pravidel, které požadujeme.

Vlastnosti:

  • A Atomicita → transakce proběhne celá nebo vůbec ne. Pokud některá část selže selže celá transakce.

  • C Konzistence → Transakce převede databázi jednoho konzistentního stavu do druhého a zaručuje, že do databáze budou zapsána pouze platná data. Pokud by mělo dojít k zapsání dat, která porušují integritní omezení celá transakce bude vrácena zpět a nedojde k žádným změnám.

  • I Nezávislost → částečné změny provedené během jedné transakce před jejím dokončením nejsou vidět jiným transakcím. To znamená, že když v jednom případě je spuštěno více transakcí tak tyto jsou od sebe izolovány a navzájem se neovlivňují

  • D Trvanlivost → Změny dat zapsané úspěšně ukončenou transakcí jsou v databázi uložené natrvalo.

	declare @er int
	begin transaction;
	set @er = 0;
	begin 
	if @er < > 0 
		begin 
		print 'transakce selhala';
	rollback 
	end 
	else 
	begin 
	print 'transakce OK'; 
		commit;
	end
end

Implementace transakcí:
Transakce se realizují dvěma způsoby:

  • Pomocí transakčního protokolu

  • Multigeneračně

Transakční protokol je soubor dat ve kterém má server uložené transakce a jejich průběh a s jehož pomocí lze vrátit vše do konzistentního stavu po pádu OS nebo selhání HW

K zajištění izolovanosti se používá zámků neboli zamykání dat na úrovni databáze/tabulky/řádku (page)

Zamykání znamená, že se jiným transakcím znemožní práce s daty, které používá právě probíhající transakce což vede k řazení transakcí do fronty a zpomalení paralelního zpracování.

Paralelní se zpracování se řeší:

  • Způsoby zamykání

  • Vstupní izolovanosti

Fylozofie se dále dělí na:

  • Optimistický způsob

  • Pesimistický způsob

U optimistické filozofie, že ve většině případů nebude docházet ke konfliktům při přístupu ke konkurenčním datům

Proto jsou data zamykána jen na nezbytně nutnou dobu a nepoužívají se na čtení

To ovšem může vést k deadlockům → jedna transakce zapne data, které potřebuje druhá transakce

To znamená navzájem na zdroje, které jsou blokovány → závislost do pruhu

Pesimistická filozofie zamyká data, ke kterým přistoupila jedna transakce i ke čtení, resp. záleží na vstupní izolaci dat, který má systém nastaven

Multigenerační přístup zapisuje do databáze společně s daty číslo transakce, která je vytvořila nebo změnila.

Jinak řečeno, každá změna v db je zapsána společně s číslem transakce

Při potvrzení aktualizační transakce, RDBMS zkontroluje jestli neexistují transakce s nižším transakčním číslem, které jsou aktivní, pokud ano vytvoří novou verzi aktualizovného záznamu o trasakci

Shrnutí:

  • Transakce se provádí když je více příkazů pohromadě (mimo SELECT)

  • @@error si hlídá systém sám takže kdyby nastal tak systém udělá rollback