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

czy to blokuje bazę danych?

Dla mnie dokumentacja jest trochę niejasna:

Wewnętrzne metody blokowania sugeruje, że w pewnych okolicznościach możliwe jest wstawienie do tabeli MyISAM, podczas gdy inna sesja odczytuje z niej:

Jednak Problemy z blokowaniem tabeli pokazuje sytuację, w której stół zostanie zablokowany do momentu zakończenia SELECT (to pasuje do Twojej sytuacji):

Tabela InnoDB implementuje blokady na poziomie wiersza, więc blokowany będzie tylko wiersz, który jest odczytywany, a nie cała tabela.

Zamiast polegać tylko na dokumentacji, wykonałem mały test:

  1. Utwórz dwie tabele o tej samej strukturze:table_a i table_b .
  2. Wypełnij table_a z 500 000 wierszy.
  3. Skopiuj dane z table_a do table_b używając INSERT INTO ... SELECT oświadczenie.
  4. Podczas kopiowania użyj innej sesji, aby wstawić nowy wiersz do table_a .
  5. Sprawdź, czy table_b zawiera nowy rekord.

Gdy obie tabele zawierają MyISAM, table_b nie zawierał nowego rekordu po kopii. Gdy obie tabele zawierają InnoDB, table_b zawierał nowy rekord po kopii. Powtórzyłem to trzy razy i zgodnie z oczekiwaniami wynik za każdym razem był taki sam.

Krótko mówiąc, jeśli Twój stół to MyISAM, zostanie zablokowany. Jeśli to InnoDB, to nie. Oczywiście ten test nie uwzględnia aktualizacji, ale spodziewam się, że wyniki będą podobne.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. uzyskanie trzech rekordów w porządku malejącym z każdej kategorii za pomocą zapalnika kodu

  2. Warunkowe dołączenie do serwera SQL

  3. mysql_insert_id z aktualizacją

  4. java.sql.SQLException:Odmowa dostępu dla użytkownika 'root'@'localhost' (przy użyciu hasła:TAK)

  5. Kreator zapytań Laravel dla wyników rekurencyjnych? Np. identyfikator, identyfikator_rodzica