TRANSACTION

Składnia: 

BEGIN [ DEFERRED | IMMEDIATE | EXCLUSIVE ] [ TRANSACTION [ name ]]   

END | COMMIT | ROLLBACK [ TRANSACTION [ name ]]
	

Transakcje w GDBase obsługują atomowe zatwierdzanie zmian (commit) i ich cofanie zmian (rollback).

Opcjonalne nazwa transakcji (name) może być pominięta. Transakcje zagnieżdżone nie są obsługiwane.

Transakcja to jedyny sposób wprowadzenia zmian w tabeli. Jakakolwiek instrukcja zmieniająca tabelę (czyli w zasadzie każda instrukcja SQL z wyjątkiem SELECT) automatycznie uruchomi transakcję, chyba że transakcja już jest w toku. Automatycznie uruchomione transakcje są zatwierdzanie, gdy instrukcja kończy wykonywanie.

Transakcje można uruchomić ręcznie za pomocą instrukcji BEGIN. Taka transakcja trwa aż do następnej instrukcji COMMIT lub ROLLBACK. Transakcja zostanie również cofnięta w przypadku zamknięcia tabeli lub napotkania błędu, skutkującego wykonaniem klauzuli ON CONFLICT z opcją ROLLBACK.

Notatka

  • Jeżeli w czasie trwania transakcji wykonywany jest kod w bloku TRANSFORM i wystąpił błąd, to cała transakcja zostanie cofnięta. Jeżeli błąd wystąpi w trakcie wykonywania bloku GLOBALS lub parsowania tabeli, transakcja nie będzie cofnięta.
  • Jeżeli transakcja lub kwerenda zostanie przerwana przez użytkownika, transakcja zostanie cofnięta.

Transakcje w GDBase mogą mieć jeden z trzech typów: DEFERRED (odroczona), IMMEDIATE (natychmiastowa), lub EXCLUSIVE (wyłączna):

Instrukcja COMMIT w rzeczywistości nie zatwierdzi zmian dopóki wszystkie zakolejkowane instrukcje SQL nie zostaną wykonane. Zatem, jeżeli jednocześnie kilka instrukcji SELECT jest w trakcie wykonywanie i wydane zostanie polecenie COMMIT, to zmiany nie zostaną zatwierdzone, dopóki instrukcje SELECT nie zakończą wykonywania.

Próba wydania instrukcji COMMIT może zakończyć się komunikatem o błędzie. Oznacza to, że inny proces lub wątek założył blokadę na tabelę, przez co nie jest możliwe uaktualnienie tabeli. W takim przypadku transakcja pozostaje aktywna, a instrukcję COMMIT można wydać później.