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 są 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'