Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zatwierdzenie i transakcja MySQL

W InnoDB nie musisz jawnie rozpoczynać ani kończyć transakcji dla pojedynczych zapytań, jeśli nie zmieniłeś domyślnego ustawienia automatycznego zatwierdzania, które jest „włączone”. Jeśli autocommit jest włączone, InnoDB automatycznie zamyka każde zapytanie SQL w transakcji, co jest odpowiednikiem START TRANSACTION; query; COMMIT; .

Jeśli jawnie używasz START TRANSACTION w InnoDB z włączonym autocommit, następnie wszelkie zapytania wykonywane po START TRANSACTION albo wszystkie zostaną wykonane, albo wszystkie zakończą się niepowodzeniem. Jest to przydatne w środowiskach bankowych, na przykład:jeśli przelewam 500 USD na twoje konto bankowe, ta operacja powinna się powieść tylko wtedy, gdy kwota została odjęta od mojego salda bankowego i dodana do twojego. Więc w tym przypadku możesz uruchomić coś takiego

START TRANSACTION;
UPDATE customers SET balance = balance - 500 WHERE customer = 'Daan';
UPDATE customers SET balance = balance + 500 WHERE customer = 'Dennis';
COMMIT;

Gwarantuje to, że albo oba zapytania zostaną wykonane pomyślnie, albo żadne, ale nie tylko jedno. Ten post ma więcej informacji na temat tego, kiedy należy używać transakcji.

W InnoDB bardzo rzadko będziesz musiał blokować całe tabele; InnoDB, w przeciwieństwie do MyISAM, obsługuje blokowanie na poziomie wiersza. Oznacza to, że klienci nie muszą blokować całej tabeli, zmuszając innych klientów do czekania. Klienci powinni blokować tylko te wiersze, których faktycznie potrzebują, umożliwiając innym klientom dalszy dostęp do tych, których potrzebują.

Więcej informacji o transakcjach InnoDB znajdziesz tutaj . Odpowiedzi na pytania dotyczące zakleszczenia znajdują się w sekcjach 14.2.8.8 i 14.2.8.9 dokumentów. Jeśli zapytanie się nie powiedzie, sterownik MySQL zwróci komunikat o błędzie wskazujący przyczynę; Twoja aplikacja powinna następnie ponownie wysłać zapytania, jeśli jest to wymagane.

Wreszcie w przykładowym kodzie użyłeś mysql_query . Jeśli piszesz nowy kod, przestań używać starego, wolnego i przestarzałego mysql_ biblioteka dla PHP i użyj mysqli_ lub PDO zamiast tego :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql - AKTUALIZACJA wiersza na podstawie innych wierszy

  2. Jak wybrać losowo unikatowe pary wierszy z tabeli?

  3. Importuj CSV lub XML do MySQL

  4. używając implode dla tablicy wewnątrz mysql, gdzie w klauzuli

  5. Potrzebujesz pomocy z hierarchicznym zapytaniem Mysql