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

Czy pojedyncze instrukcje mysql są atomowe w MyISAM i InnoDB?

Tak i Nie :-)

W obu przypadkach dostęp jest serializowany (zakładając, że używasz silnika transakcyjnego, takiego jak InnoDB), ponieważ trafiają do tego samego wiersza, więc nie będą się ze sobą kolidować. Innymi słowy, stwierdzenia atomowe.

Jednak liczba wierszy, których to dotyczy, zależy w rzeczywistości od zestawu konfiguracyjnego po otwarciu połączenia. strona mysql_affected_rows() ma to do powiedzenia (moje pogrubienie):

Oraz ze strony mysql_real_connect :

A więc jeśli chodzi o to, co dzieje się z CLIENT_FOUND_ROWS podczas konfigurowania, odpowiednie wiersze dla:

UPDATE T1 SET C1 = 'dirty' WHERE id = 1

mieć nic związane z tym, czy dane są zmienione tylko te wiersze pasują. Byłoby to 1 dla obu zapytań.

Z drugiej strony, jeśli CLIENT_FOUND_ROWS był nie ustawione, drugie zapytanie tak naprawdę nie zmieniałoby wiersza (ponieważ jest już wypełnione przez „brudne”) i miałoby liczbę wierszy równą zero.

Gdybyś chciał tak samo zachowanie niezależnie od tego ustawienia (pokazuje tylko zmiany), możesz użyć czegoś takiego:

UPDATE T1 SET C1 = 'dirty' WHERE id = 1 AND C1 <> 'dirty'


  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 usuwanie duplikatów danych

  2. Używając Dockera otrzymuję błąd:SQLSTATE[HY000] [2002] Brak takiego pliku lub katalogu

  3. mysql czas wykonania powrotu z wiersza poleceń?

  4. W przypadku instalacji mysql homebrew, gdzie jest my.cnf?

  5. MySQL:prosty sposób na przełączanie wartości pola int