Transakcje są używane, gdy masz grupę zapytań, które są od siebie zależne.
Na przykład bank:
- Klient banku „Jan” przelewa 100 USD na konto „Alice”.
- W tym przykładzie są 2 zapytania (nie pokazuję historii rejestrowania ani transakcji...itd.). Musisz odjąć 100 USD od salda Johna i dodać to do salda Alicji.
Start transaction
- Odlicz od Jana
UPDATE accounts SET balance=balance-100 WHERE account='John'
- Dodaj do Alicji
UPDATE accounts SET balance=balance+100 WHERE account='Alice'
commit
Transakcja nie zostanie zapisana, dopóki jej nie zatwierdzisz. Więc jeśli wystąpił błąd w którymkolwiek zapytaniu, możesz wywołać rollback
i cofnij wszystkie zapytania, które zostały uruchomione od momentu rozpoczęcia transakcji. Jeśli z jakiegoś powodu zapytanie o dodanie 100 USD do Alicji nie powiodło się, możesz wycofać i nie odejmować 100 USD od Jana. Jest to sposób na zapewnienie, że w razie potrzeby możesz automatycznie cofnąć zapytania.
-
Czy powinienem rozpocząć transakcję, gdy wykonuję dwa lub więcej zapytań usuwania/aktualizacji/wstawiania?
Zależy od tego, co robią zapytania.
-
Czy powinienem również rozpocząć transakcję, gdy mam tylko jedno zapytanie dotyczące usunięcia/aktualizacji/wstawienia?
Nie jest to konieczne, chyba że potrzebujesz sposobu na wycofanie (cofnięcie) zapytania, tak jak chcesz dokonać aktualizacji i zweryfikować je przed wywołaniem zatwierdzenia (zapisania).
-
Czy powinienem rozpocząć transakcję np. 10 razy na stronie, czy lepiej tylko raz dla całej strony, czy też zalecacie maksimum dla każdej strony (na przykład 5)?
Rozpocznij tyle, ile potrzebujesz. Wątpię, czy masz wiele transakcji na stronie, ponieważ najprawdopodobniej robiłbyś jedną rzecz przy każdym wczytaniu strony (tj. przelewanie pieniędzy).