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

MySQL InnoDB:różnica między `DO AKTUALIZACJI` a `BLOKADĄ W TRYBIE UDOSTĘPNIANIA`

Próbowałem zrozumieć różnicę między nimi. Udokumentuję to, co znalazłem w nadziei, że przyda się to następnej osobie.

Oba LOCK IN SHARE MODE i FOR UPDATE upewnij się, że żadna inna transakcja nie może zaktualizować wybranych wierszy. Różnica między nimi polega na tym, jak traktują blokady podczas odczytu danych.

LOCK IN SHARE MODE nie uniemożliwia innej transakcji odczytu tego samego wiersza, który został zablokowany.

FOR UPDATE zapobiega innym blokującym odczytom tego samego wiersza (odczyty nieblokujące mogą nadal czytać ten wiersz; LOCK IN SHARE MODE i FOR UPDATE blokują odczyty).

Ma to znaczenie w przypadkach, takich jak aktualizacja liczników, gdzie odczytujesz wartość w jednej instrukcji i aktualizujesz wartość w innej. Tutaj za pomocą LOCK IN SHARE MODE pozwoli 2 transakcjom odczytać tę samą wartość początkową. Więc jeśli licznik został zwiększony o 1 przez obie transakcje, końcowy licznik może wzrosnąć tylko o 1 - ponieważ obie transakcje początkowo odczytują tę samą wartość.

Używanie FOR UPDATE zablokowałoby drugą transakcję przed odczytaniem wartości, dopóki pierwsza nie zostanie wykonana. Zapewni to zwiększenie licznika o 2.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć wypełniony obraz Docker MySQL w czasie kompilacji?

  2. Automatyczne wycofanie, jeśli TRANSAKCJA ZATWIERDZENIE nie zostanie osiągnięta

  3. Najlepszy sposób na wyłapanie błędów LOAD DATA LOCAL INFILE?

  4. Jak zresetować hasło roota w MySQL 8.0?

  5. Jak wstawić tablicę do pojedynczej instrukcji MySQL Prepared z PHP i PDO