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

Czy dołączanie do wstawiania/aktualizacji w MySQL jest operacją niepodzielną?

Rozumiem Twoje pytanie w stylu „czy każde z tych zapytań samo w sobie jest operacją atomową?”. Wtedy odpowiedź brzmi „tak”. Pozostałe dwie odpowiedzi są poprawne, gdy mówią, że wszystkie twoje stwierdzenia razem nie są atomowe.

Atomowość w bazach danych oznacza tylko wszystko albo nic. To nie oznacza poprawność danych. Twoje oświadczenie się powiedzie lub nie. Nie ma to nic wspólnego z połączeniami ani podzapytaniami. Jedna instrukcja to jedna instrukcja, bez względu na to, czy baza danych ma używać tabeli tymczasowej w pamięci, czy na dysku, czy nie.

Transakcje po prostu informują bazę danych, aby traktowała wiele zestawień jako jedno zestawienie. Gdy jedno ze stwierdzeń nie powiedzie się, wszystkie zostaną wycofane.

Ważnym powiązanym tematem jest tutaj poziom izolacji . Możesz o nich poczytać.

EDYTUJ (aby odpowiedzieć na komentarz):

Zgadza się. Dopóki jest to prawidłowe stwierdzenie i nie ma awarii zasilania ani innych przyczyn niepowodzenia zapytania, jest ono wykonywane. Sama atomowość gwarantuje jedynie, że oświadczenie jest/są wykonywane, czy nie. Gwarantuje kompletność i że dane nie są uszkodzone (ponieważ operacja zapisu nie zakończyła się lub coś takiego). Nie gwarantuje to poprawności danych. Mając zapytanie takie jak INSERT INTO foo SELECT MAX(id) + 1 FROM bar; musisz się upewnić, ustawiając prawidłowy poziom izolacji , że nie dostajesz fantomowych odczytów ani nic takiego.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dołącz do dwóch tabel MySQL za pomocą PHP

  2. Kolejność nazwanych parametrów ma sens dla dostawcy danych MySql .Net?

  3. Jak pobrać niepasujące wyniki w mysql

  4. Jak przechowywać Euro Symbol w bazie mysql?

  5. Hasło sklepu jest w porządku w zmiennej sesji php?