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.
Transakcje w GDBase mogą mieć jeden z trzech typów: DEFERRED (odroczona), IMMEDIATE (natychmiastowa), lub EXCLUSIVE (wyłączna):
DEFERRED oznacza, że tabela nie będzie blokowana aż do momentu pierwszego dostępu. W tym przypadku sama instrukcja BEGIN nic nie robi. Tabela jest blokowana w momencie pierwszej operacji odczytu lub zapisu. Pierwsza operacja odczytu tworzy blokadę SHARED, a pierwsza operacja zapisu tworzy blokadę RESERVED. Ponieważ blokady są ustanowione dopiero wtedy, gdy są potrzebne, jest możliwe że zawartość tabeli zostanie zmieniona przez inną transakcję już po wydaniu instrukcji BEGIN.
Jest to domyślny rodzaj transakcji w GDBase.
IMMEDIATE gwarantuje, że żaden inny proces nie będzie mógł zmienić zawartości tabeli lub wykonać instrukcji BEGIN IMMEDIATE i BEGIN EXCLUSIVE w trakcie trwania transakcji. Inne procesy nadal mogą odczytywać zawartość tabeli.
EXCLUSIVE gwarantuje, że żaden inny proces nie będzie mógł odczytywać i zmieniać zawartości tabeli w trakcie trwania transakcji.
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.