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
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.
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.
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
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.
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.
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