Ano i Ne :-)
V obou případech je přístup serializován (za předpokladu, že používáte transakční engine jako InnoDB), protože zasahují do stejného řádku, takže se nebudou navzájem rušit. Jinými slovy, výroky jsou atomový.
Počet ovlivněných řádků však ve skutečnosti závisí na vaší konfigurační sadě při otevření připojení. stránka pro mysql_affected_rows() má toto co říct (můj odvážný):
A ze stránky mysql_real_connect :
Tedy pokud jde o to, co se stane s CLIENT_FOUND_ROWS
při konfiguraci dotčené řádky pro:
UPDATE T1 SET C1 = 'dirty' WHERE id = 1
nemají nic to, zda se data změnila pouze ty řádky, které se shodují. To by bylo 1 pro oba dotazy.
Na druhou stranu, pokud CLIENT_FOUND_ROWS
není nastaven, druhý dotaz by ve skutečnosti neměnil řádek (protože je již naplněn 'špinavým') a měl by počet řádků nula.
Pokud jste chtěli totéž chování bez ohledu na toto nastavení (zobrazení pouze změn), můžete použít něco jako:
UPDATE T1 SET C1 = 'dirty' WHERE id = 1 AND C1 <> 'dirty'