Opisywanie transakcji

Ukończone

Transakcja jest co najmniej jedną instrukcją języka T-SQL, która jest traktowana jako jednostka. Jeśli pojedyncza transakcja zakończy się niepowodzeniem, wówczas wszystkie polecenia również zakończą się niepowodzeniem. Jeśli transakcja zakończy się pomyślnie, wiadomo, że wszystkie instrukcje modyfikacji danych w transakcji zakończyły się pomyślnie i zostały zatwierdzone w bazie danych.

Transakcje zapewniają, że wszystkie operacje w ramach transakcji albo zakończą się powodzeniem, albo wszystkie się nie powiodą, a częściowe ukończenie nie jest dozwolone. Transakcje hermetyzują operacje, które muszą być logicznie wykonywane razem, takie jak wiele wpisów w powiązanych tabelach, które są częścią jednej operacji.

Rozważmy firmę, która przechowuje zakupy w tabeli Sales.Order i płatności w tabeli Sales.Payment . Gdy ktoś kupuje coś, obie tabele muszą zostać zaktualizowane. Jeśli ta funkcja jest implementowana bez transakcji i występuje błąd podczas zapisywania płatności w bazie danych, wstawienie Sales.Order będzie nadal zatwierdzane, pozostawiając tabelę płatności bez wpisu.

Po zaimplementowaniu tej operacji z transakcjami oba wpisy są dokonywane lub żaden z nich nie jest wprowadzany. Jeśli wystąpi błąd podczas zapisywania płatności w tabeli, operacja wstawiania zamówienia również zostanie wycofana. Oznacza to, że baza danych jest zawsze w stanie spójnym.

Diagram przedstawiający różnicę między używaniem transakcji, a nie używaniem transakcji.

Należy zauważyć, że odnosi się to do poważnych błędów, takich jak błędy sprzętowe lub sieciowe. Błędy w instrukcjach SQL spowodowałyby wycofanie transakcji tylko w pewnych okolicznościach i ważne jest, aby przejrzeć kolejne jednostki w tym module, aby w pełni zrozumieć implikacje korzystania z transakcji.

Istnieją różne typy transakcji:

Transakcje jawne

Słowa kluczowe BEGIN TRANSACTION i COMMIT lub ROLLBACK rozpoczynają i kończą każdą partię instrukcji. Dzięki temu można określić, które polecenia muszą zostać albo zatwierdzone, albo wycofane jednocześnie.

Transakcje niejawne

Transakcja jest uruchamiana po zakończeniu poprzedniej transakcji. Każda transakcja jest jawnie zakończona za pomocą instrukcji COMMIT lub ROLLBACK.

Właściwości ACID

Systemy przetwarzania transakcyjnego online (OLTP) wymagają, aby transakcje spełniały cechy „ACID”.

  • Niepodzielność — każda transakcja jest traktowana jako pojedyncza jednostka, która kończy się powodzeniem całkowicie lub kończy się niepowodzeniem. Na przykład transakcja, która obejmowała obciążanie środków z jednego konta i kredytowanie tej samej kwoty na inne konto, musi wykonać obie akcje. Jeśli nie można ukończyć żadnej akcji, inna akcja musi zakończyć się niepowodzeniem.
  • Spójność — transakcje mogą przyjmować tylko dane w bazie danych z jednego prawidłowego stanu do innego. Aby kontynuować przykład debetowy i kredytowy powyżej, ukończony stan transakcji musi odzwierciedlać przeniesienie funduszy z jednego konta do drugiego.
  • Izolacja — współbieżne transakcje nie mogą zakłócać siebie i muszą powodować spójny stan bazy danych. Na przykład, gdy transakcja do przeniesienia funduszy z jednego konta do innego jest w trakcie przetwarzania, inna transakcja, która sprawdza saldo tych kont, musi zwrócić spójne wyniki — transakcja sprawdzająca saldo nie może pobrać wartości dla jednego konta, które odzwierciedla saldo przed przeniesieniem, oraz wartość drugiego konta, które odzwierciedla saldo po przeniesieniu.
  • Trwałość — po zatwierdzeniu transakcji pozostanie ona zatwierdzona. Po zakończeniu transakcji transferu konta poprawione salda kont są utrwalane, tak aby nawet jeśli system bazy danych miał zostać wyłączony, zatwierdzona transakcja zostanie odzwierciedlona po ponownym włączeniu.