Kiedy powinienem używać transakcji w moich zapytaniach?

Czytam bardzo szczegółowe samouczki na temat korzystania z transakcji z typami baz danych i silnikami baz danych, ale nie znalazłem poradnika, który uczy mnie, kiedy i dlaczego powinienem z nich korzystać.

Wiem, że transakcje są zwykle używane w bankowości, więc kiedy pracujemy z danymi pieniężnymi, ale mogę sobie wyobrazić, że są one używane na wiele innych sposobów.

Dzisiaj pracuję nad stroną z różnymi INSERT instrukcjami dla relacyjnej bazy danych i chciałem wiedzieć, czy jest to jeden z przypadków, w których powinienem użyć oni.

Odnoszę wrażenie, że nie znam przypadków, w których dane mogą zostać częściowo utracone (poza błędami kodera), więc zawsze martwię się o to, kiedy powinienem ich użyć.

Czy ktoś może wyjaśnić lub podać jakiś związek z tymi podstawowymi zasadami?

Używam MySQL 5.0.8. Czy powinienem używać InnoDB dla wszystkich tabel, które wymagają transakcji? Jeśli tak, to czy InnoDB jest wolniejszy od zwykłego MyISAM, ale nie powinienem się tym martwić?

Dzięki

Author: mc01, 2010-01-29

5 answers

W zasadzie za każdym razem, gdy masz jednostkę pracy, która jest wrażliwa na zmiany zewnętrzne lub , musisz mieć możliwość cofnięcia każdej zmiany , jeśli wystąpi błąd lub z innego powodu.

Zajrzyj tutaj, aby poznać kilka doskonałych odpowiedzi i ich powody ich używania.

 15
Author: Nick Craver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:41

Oprócz tego, co napisał Nick Craver, chciałbyś użyć transakcji, gdy masz serię zapisów, które muszą być wykonane atomicznie; to znaczy, wszystkie powinny odnieść sukces lub żaden nie powinien odnieść sukcesu.

 8
Author: danben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-29 00:26:25

Transakcje powinny być używane, gdy istnieje możliwość, że albo niepowodzenie, albo ktoś inny czytający lub piszący w środku zadania może spowodować uszkodzenie danych. Należą do nich, ale nie są ograniczone do:

  • odczyt z tabeli do późniejszego usunięcia
  • zapis powiązanych danych do wielu tabel
 6
Author: Ignacio Vazquez-Abrams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-29 00:26:46

Używasz transakcji, gdy masz grupę akcji, które muszą być atomowe (Wszystkie się powiodły lub żadna nie powiodła się) owijanie tych akcji w transakcję pozwala na wycofanie akcji, które już się powiodły, gdy napotkasz błąd. Zapewnia również, że dane, z którymi pracujesz, są spójne, ponieważ blokady będą przechowywane do czasu zakończenia transakcji.

 3
Author: Nate Heinrich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-29 00:26:50

W niektórych frameworkach, np. Spring, transakcje automatyczne pozwalają na ponowne wykonanie transakcji, jeśli się nie powiedzie.

 0
Author: Alexander Volkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-01 21:21:29