Да и Не :-)
И в двата случая достъпът е сериализиран (ако приемем, че използвате транзакционен двигател като InnoDB), тъй като те удрят един и същи ред, така че няма да се намесват един в друг. С други думи, изявленията са атомна.
Въпреки това, засегнатият брой редове всъщност зависи от вашия конфигурационен набор, когато отворите връзката. Страницата за mysql_affected_rows() има да каже това (с удебелен шрифт):
И от страницата mysql_real_connect :
И така, по отношение на това, което се случва с CLIENT_FOUND_ROWS
като се конфигурира, засегнатите редове за:
UPDATE T1 SET C1 = 'dirty' WHERE id = 1
нямат нищо свързано с това дали данните са променени, само редовете съвпадащи. Това ще бъде 1 и за двете заявки.
От друга страна, ако CLIENT_FOUND_ROWS
беше не зададена, втората заявка всъщност няма да променя реда (тъй като той вече е попълнен с „мръсен“) и ще има нулев брой редове.
Ако искате същото поведение независимо от тази настройка (показва само промени), можете да използвате нещо като:
UPDATE T1 SET C1 = 'dirty' WHERE id = 1 AND C1 <> 'dirty'