Ja en Nee :-)
In beide gevallen is de toegang geserialiseerd (ervan uitgaande dat je een transactie-engine zoals InnoDB gebruikt) omdat ze dezelfde rij raken, zodat ze elkaar niet hinderen. Met andere woorden, de uitspraken zijn atomair.
Het aantal betrokken rijen hangt echter af van uw configuratieset wanneer u de verbinding opent. De pagina voor mysql_affected_rows() heeft dit te zeggen (mijn vetgedrukt):
En van de mysql_real_connect-pagina :
Dus, in termen van wat er gebeurt met CLIENT_FOUND_ROWS
worden geconfigureerd, de betreffende rijen voor:
UPDATE T1 SET C1 = 'dirty' WHERE id = 1
heb niets te maken hebben met of de gegevens gewijzigd zijn, alleen welke rijen overeenkomen. Dit zou 1 zijn voor beide zoekopdrachten.
Aan de andere kant, als CLIENT_FOUND_ROWS
was niet ingesteld, zou de tweede query de rij niet daadwerkelijk veranderen (omdat deze al is gevuld met 'dirty') en zou het aantal rijen nul zijn.
Als je hetzelfde wilde gedrag ongeacht die instelling (laat alleen wijzigingen zien), je zou zoiets kunnen gebruiken als:
UPDATE T1 SET C1 = 'dirty' WHERE id = 1 AND C1 <> 'dirty'